r3status 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5a0f7b146cec610563175f09c27651110f1cc009
4
- data.tar.gz: 1ff0569ec99476d1c1e1f7be73dd85fb274cd264
3
+ metadata.gz: 5c2c2e2a5985350fdd7009f16224f8d0ce2aa225
4
+ data.tar.gz: cdfe3f6a14611a3159ff9c362809e77fe62e224c
5
5
  SHA512:
6
- metadata.gz: ebe6cdeb3ce62d85c12777276c336bd21fa1d237cb2bb287e92d341c762f770b0d9a12baf212a7200ef1cd8c155a54dd6d55017d45a9befc67f51c46a3c81465
7
- data.tar.gz: aec9b989dd1df12877ddcd254959f5f40ef1f0c621304ff111d6f262684b4006960b3863f05048b390b3164e050153c4f14c8376edbcff7561fb4f9d8da7e245
6
+ metadata.gz: 6671a6a365fff74396378124de0da333ecf9bec77a1f78fed5fdf54bbf3e70ac79a2662d211814d31eb83ef34f3943d69dff37e5d3e6e25dd4d9d939bea149e3
7
+ data.tar.gz: 6ee838c35dd8b83b2900eff0cdd522d1a9e3cb239e4e389869978459c643840abb0afee8ae2dd01379d47c5fad2a755386658fa1acef1ca530109a337a2a27c4
@@ -2,6 +2,7 @@ require_relative './r3status/blocks.rb'
2
2
  require 'json'
3
3
 
4
4
  module R3Status
5
+
5
6
  def loop_with_interval secs
6
7
  loop do
7
8
  start = Time.now
@@ -29,28 +30,37 @@ module R3Status
29
30
  @blocks.map { |i| i.to_s(postfix: @postfix, prefix: @prefix) }.
30
31
  reject { |i| i.nil? }.inject { |i, j| i << ",#{j}"}
31
32
  end
33
+
32
34
  def parse str
33
35
  return if str.length < 2
34
36
  obj = nil
37
+ str = str.strip.sub(/\A\,/ , "")
35
38
 
36
- str = str.sub(/\A\,/ , "")
37
- File.open("input.txt", 'a') {|f| f.puts str }
38
39
  begin
39
40
  obj = JSON.parse(str)
40
41
  rescue Exception => e
41
- File.open("log.txt", 'a') {|f| f.puts e.to_s }
42
42
  return
43
43
  end
44
+
44
45
  block = @blocks.find { |b| b.name == obj["name"] }
45
46
  block.clicked(obj["button"], obj["x"], obj["y"]) unless block.nil?
46
47
  end
47
- def run
48
48
 
49
- fork do
49
+ def run
50
+ @reader_thread = Thread.new do
51
+ begin
50
52
  loop do
51
53
  s = gets.chomp
52
54
  parse s
53
55
  end
56
+ rescue Exception => e
57
+ File.open("log.txt", 'a') {|f| f.puts e.backtrace }
58
+ end
59
+ end.run
60
+
61
+ at_exit do
62
+ @reader_thread.kill
63
+ @blocks.each { |b| b.terminate }
54
64
  end
55
65
 
56
66
  puts "{\"version\":1, \"click_events\":true}["
@@ -58,6 +68,7 @@ module R3Status
58
68
  @blocks.each {|b| b.update }
59
69
  puts "[#{transmission}],"
60
70
  end
71
+
61
72
  end
62
73
  end
63
74
  end
@@ -0,0 +1,24 @@
1
+ module R3Status
2
+ class AsyncBlock < Block
3
+ attr_accessor :update_interval, :updater_thread
4
+
5
+ def initialize(**args)
6
+ args = {update_interval: 3}.merge(args)
7
+ super(args)
8
+ end
9
+
10
+ def update
11
+ @full_text
12
+ return if @updater_pid.is_a? Fixnum
13
+ @updater_thread = Thread.new do
14
+ loop_with_interval(update_interval) { async_update }
15
+ end
16
+ end
17
+
18
+ def terminate
19
+ @updater_thread.kill
20
+ end
21
+
22
+ def async_update; end
23
+ end
24
+ end
@@ -6,16 +6,18 @@ module R3Status
6
6
  attr_accessor :full_text, :text_color, :name, :formats, :colors
7
7
 
8
8
  def initialize(**args)
9
+ self.colors ||= {}
10
+ self.formats ||= Hash.new(DEFAULT_FORMAT)
9
11
  args.each do |k, v|
10
12
  v.default = v[:default] if (v.is_a? Hash) && (v.key? :default)
11
13
  send "#{k}=", v
12
14
  end
13
-
14
- self.colors ||= {}
15
- self.formats ||= Hash.new(DEFAULT_FORMAT)
16
15
  end
17
16
 
18
17
  def update; end
18
+
19
+ def terminate; end
20
+
19
21
  def clicked(button, x, y); end
20
22
 
21
23
  def to_s(prefix: nil, postfix: nil)
@@ -24,5 +26,12 @@ module R3Status
24
26
  "separator": false})
25
27
  end
26
28
 
29
+ def format
30
+ formats.default
31
+ end
32
+
33
+ def format=(fmt)
34
+ @formats.default = fmt
35
+ end
27
36
  end
28
37
  end
@@ -9,3 +9,7 @@ require_relative './volume_block.rb'
9
9
  require_relative './battery_block.rb'
10
10
 
11
11
  require_relative './keyboard_layout_block.rb'
12
+
13
+ require_relative './shell_block.rb'
14
+
15
+ require_relative './async_block.rb'
@@ -0,0 +1,32 @@
1
+ module R3Status
2
+ class ShellBlock < StaticBlock
3
+ attr_accessor :command, :click_commands
4
+
5
+ def initialize(**args, &block)
6
+ super(args, &block)
7
+ end
8
+
9
+ def update
10
+ return if command.nil?
11
+
12
+ cmd = `#{command}`.split.map {|str| str.chomp}
13
+ return if cmd.length == 0
14
+
15
+ @full_text = cmd[0]
16
+ @text_color = cmd[1] if cmd.length >= 2
17
+ end
18
+
19
+ def clicked(button, x, y)
20
+ super(button, x, y)
21
+
22
+ case click_commands.class
23
+ when String
24
+ `#{click_commands}`
25
+ when Array
26
+ `#{click_commands[button - 1]}`
27
+ when Hash
28
+ `#{click_commands[button]}`
29
+ end
30
+ end
31
+ end
32
+ end
@@ -1,3 +1,5 @@
1
+ require 'securerandom'
2
+
1
3
  module R3Status
2
4
  class StaticBlock < Block
3
5
  attr_accessor :clicked_block
@@ -6,12 +8,15 @@ module R3Status
6
8
  @clicked_block = block
7
9
 
8
10
  super(args)
11
+
12
+ @full_text ||= format
13
+ @name ||= SecureRandom.uuid
9
14
  end
10
15
 
11
16
  def clicked(button, x, y)
12
- return if clicked_block.nil?
13
- args = [self, button, x, y].take(clicked_block.arity)
14
- clicked_block.call(*args)
17
+ return if @clicked_block.nil?
18
+ args = [self, button, x, y].take(@clicked_block.arity)
19
+ @clicked_block.(*args)
15
20
  end
16
21
  end
17
22
  end
@@ -1,12 +1,11 @@
1
1
  module R3Status
2
2
  class TimeBlock < Block
3
- attr_accessor :format
4
3
 
5
- def initialize(format: "%H:%m @ %e/%M/%Y", **args)
6
- @format = format
7
-
8
- super()
4
+ def initialize(**args)
5
+ args = {format: "%H:%m @ %e/%M/%Y"}.merge(args)
6
+ super(args)
9
7
  end
8
+
10
9
  def update
11
10
  self.full_text = Time.now.strftime(format)
12
11
  end
@@ -1,6 +1,6 @@
1
1
  module R3Status
2
2
  class VolumeBlock < Block
3
- attr_accessor :format, :format_muted, :default_color, :color_muted, :step
3
+ attr_accessor :step
4
4
 
5
5
  def initialize(**args)
6
6
  args = {formats: {muted: " %{volume}%", unmuted: " %{volume}%"},
@@ -19,11 +19,11 @@ module R3Status
19
19
 
20
20
  def clicked button, x, y
21
21
  case button
22
- when 1, 4
22
+ when 4
23
23
  increase
24
24
  when 2
25
25
  toggle_mute
26
- when 3, 5
26
+ when 5
27
27
  decrease
28
28
  end
29
29
  end
@@ -33,10 +33,10 @@ module R3Status
33
33
  `amixer -q set Master toggle`
34
34
  end
35
35
  def increase
36
- `amixer -c 0 set Master #{step}+ unmute`
36
+ `amixer -c 0 set Master #{step}%+ unmute`
37
37
  end
38
38
  def decrease
39
- `amixer -c 0 set Master #{step}- unmute`
39
+ `amixer -c 0 set Master #{step}%- unmute`
40
40
  end
41
41
  def volume
42
42
  `amixer -c 0 get Master | grep Mono: | cut -d " " -f6 | tr -d [,],%`.to_i
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: r3status
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gilad Naaman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-24 00:00:00.000000000 Z
11
+ date: 2014-09-25 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: r3status is ruby implmentation of the i3bar protocol, and is an alternative
14
14
  to the default i3status.
@@ -18,14 +18,16 @@ extensions: []
18
18
  extra_rdoc_files: []
19
19
  files:
20
20
  - lib/r3status.rb
21
+ - lib/r3status/async_block.rb
21
22
  - lib/r3status/battery_block.rb
22
23
  - lib/r3status/block.rb
23
24
  - lib/r3status/blocks.rb
24
25
  - lib/r3status/keyboard_layout_block.rb
26
+ - lib/r3status/shell_block.rb
25
27
  - lib/r3status/static_block.rb
26
28
  - lib/r3status/time_block.rb
27
29
  - lib/r3status/volume_block.rb
28
- homepage: https://rubygems.org/gems/example
30
+ homepage: https://github.com/Gilnaa/R3Status
29
31
  licenses:
30
32
  - LGPL3
31
33
  metadata: {}