pulseaudio 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +4 -1
- data/Gemfile.lock +20 -5
- data/VERSION +1 -1
- data/gfx/volume_0.png +0 -0
- data/gfx/volume_100.png +0 -0
- data/gfx/volume_33.png +0 -0
- data/gfx/volume_66.png +0 -0
- data/gui/choose_active_sink_gtk3/choose_active_sink.glade +101 -0
- data/gui/choose_active_sink_gtk3/choose_active_sink_gtk3.rb +160 -0
- data/include/pulseaudio_sink.rb +9 -0
- data/lib/pulseaudio.rb +1 -1
- data/pulseaudio.gemspec +24 -12
- data/test_scripts/choose_active_sink_gtk3.rb +26 -0
- metadata +49 -22
data/Gemfile
CHANGED
@@ -2,7 +2,11 @@ source "http://rubygems.org"
|
|
2
2
|
# Add dependencies required to use your gem here.
|
3
3
|
# Example:
|
4
4
|
# gem "activesupport", ">= 2.3.5"
|
5
|
+
|
5
6
|
gem "wref"
|
7
|
+
gem "gir_ffi"
|
8
|
+
gem "gtk3assist"
|
9
|
+
gem "gettext"
|
6
10
|
|
7
11
|
# Add dependencies to develop your gem here.
|
8
12
|
# Include everything needed to run rake, tests, features, etc.
|
@@ -11,5 +15,4 @@ group :development do
|
|
11
15
|
gem "rdoc", "~> 3.12"
|
12
16
|
gem "bundler", ">= 1.0.0"
|
13
17
|
gem "jeweler", "~> 1.8.3"
|
14
|
-
gem "rcov", ">= 0"
|
15
18
|
end
|
data/Gemfile.lock
CHANGED
@@ -2,15 +2,27 @@ GEM
|
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
4
|
diff-lcs (1.1.3)
|
5
|
+
ffi (1.0.11)
|
6
|
+
gettext (2.3.1)
|
7
|
+
locale
|
8
|
+
gir_ffi (0.4.1)
|
9
|
+
ffi (~> 1.0.8)
|
10
|
+
indentation (~> 0.0.6)
|
11
|
+
gir_ffi-gtk (0.4.0)
|
12
|
+
gir_ffi (~> 0.4.0)
|
5
13
|
git (1.2.5)
|
6
|
-
|
14
|
+
gtk3assist (0.0.5)
|
15
|
+
gir_ffi-gtk
|
16
|
+
xml-simple
|
17
|
+
indentation (0.0.6)
|
18
|
+
jeweler (1.8.4)
|
7
19
|
bundler (~> 1.0)
|
8
20
|
git (>= 1.2.5)
|
9
21
|
rake
|
10
22
|
rdoc
|
11
|
-
json (1.7.
|
23
|
+
json (1.7.5)
|
24
|
+
locale (2.0.8)
|
12
25
|
rake (0.9.2.2)
|
13
|
-
rcov (0.9.11)
|
14
26
|
rdoc (3.12)
|
15
27
|
json (~> 1.4)
|
16
28
|
rspec (2.8.0)
|
@@ -21,15 +33,18 @@ GEM
|
|
21
33
|
rspec-expectations (2.8.0)
|
22
34
|
diff-lcs (~> 1.1.2)
|
23
35
|
rspec-mocks (2.8.0)
|
24
|
-
wref (0.0.
|
36
|
+
wref (0.0.5)
|
37
|
+
xml-simple (1.1.1)
|
25
38
|
|
26
39
|
PLATFORMS
|
27
40
|
ruby
|
28
41
|
|
29
42
|
DEPENDENCIES
|
30
43
|
bundler (>= 1.0.0)
|
44
|
+
gettext
|
45
|
+
gir_ffi
|
46
|
+
gtk3assist
|
31
47
|
jeweler (~> 1.8.3)
|
32
|
-
rcov
|
33
48
|
rdoc (~> 3.12)
|
34
49
|
rspec (~> 2.8.0)
|
35
50
|
wref
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.5
|
data/gfx/volume_0.png
ADDED
Binary file
|
data/gfx/volume_100.png
ADDED
Binary file
|
data/gfx/volume_33.png
ADDED
Binary file
|
data/gfx/volume_66.png
ADDED
Binary file
|
@@ -0,0 +1,101 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<interface>
|
3
|
+
<!-- interface-requires gtk+ 3.0 -->
|
4
|
+
<object class="GtkListStore" id="liststore1"/>
|
5
|
+
<object class="GtkWindow" id="window">
|
6
|
+
<property name="can_focus">False</property>
|
7
|
+
<property name="title" translatable="yes">Choose active sink</property>
|
8
|
+
<property name="window_position">center</property>
|
9
|
+
<property name="default_width">440</property>
|
10
|
+
<property name="default_height">400</property>
|
11
|
+
<signal name="delete-event" handler="on_window_delete_event" swapped="no"/>
|
12
|
+
<child>
|
13
|
+
<object class="GtkVPaned" id="vpaned1">
|
14
|
+
<property name="visible">True</property>
|
15
|
+
<property name="can_focus">True</property>
|
16
|
+
<property name="position">200</property>
|
17
|
+
<property name="position_set">True</property>
|
18
|
+
<child>
|
19
|
+
<object class="GtkFrame" id="frame1">
|
20
|
+
<property name="visible">True</property>
|
21
|
+
<property name="can_focus">False</property>
|
22
|
+
<property name="label_xalign">0</property>
|
23
|
+
<property name="shadow_type">none</property>
|
24
|
+
<child>
|
25
|
+
<object class="GtkAlignment" id="alignment1">
|
26
|
+
<property name="visible">True</property>
|
27
|
+
<property name="can_focus">False</property>
|
28
|
+
<property name="left_padding">12</property>
|
29
|
+
<child>
|
30
|
+
<object class="GtkTreeView" id="tvSinks">
|
31
|
+
<property name="visible">True</property>
|
32
|
+
<property name="can_focus">True</property>
|
33
|
+
<signal name="cursor-changed" handler="on_tvSinks_cursor_changed" swapped="no"/>
|
34
|
+
<child internal-child="selection">
|
35
|
+
<object class="GtkTreeSelection" id="treeview-selection1"/>
|
36
|
+
</child>
|
37
|
+
</object>
|
38
|
+
</child>
|
39
|
+
</object>
|
40
|
+
</child>
|
41
|
+
<child type="label">
|
42
|
+
<object class="GtkLabel" id="label1">
|
43
|
+
<property name="visible">True</property>
|
44
|
+
<property name="can_focus">False</property>
|
45
|
+
<property name="label" translatable="yes"><b>Choose active sink</b></property>
|
46
|
+
<property name="use_markup">True</property>
|
47
|
+
</object>
|
48
|
+
</child>
|
49
|
+
</object>
|
50
|
+
<packing>
|
51
|
+
<property name="resize">False</property>
|
52
|
+
<property name="shrink">True</property>
|
53
|
+
</packing>
|
54
|
+
</child>
|
55
|
+
<child>
|
56
|
+
<object class="GtkFrame" id="frame2">
|
57
|
+
<property name="visible">True</property>
|
58
|
+
<property name="can_focus">False</property>
|
59
|
+
<property name="label_xalign">0</property>
|
60
|
+
<property name="shadow_type">none</property>
|
61
|
+
<child>
|
62
|
+
<object class="GtkAlignment" id="alignment2">
|
63
|
+
<property name="visible">True</property>
|
64
|
+
<property name="can_focus">False</property>
|
65
|
+
<property name="left_padding">12</property>
|
66
|
+
<child>
|
67
|
+
<object class="GtkViewport" id="viewport2">
|
68
|
+
<property name="visible">True</property>
|
69
|
+
<property name="can_focus">False</property>
|
70
|
+
<child>
|
71
|
+
<object class="GtkTreeView" id="tvSources">
|
72
|
+
<property name="visible">True</property>
|
73
|
+
<property name="can_focus">True</property>
|
74
|
+
<signal name="cursor-changed" handler="on_tvSources_cursor_changed" swapped="no"/>
|
75
|
+
<child internal-child="selection">
|
76
|
+
<object class="GtkTreeSelection" id="treeview-selection2"/>
|
77
|
+
</child>
|
78
|
+
</object>
|
79
|
+
</child>
|
80
|
+
</object>
|
81
|
+
</child>
|
82
|
+
</object>
|
83
|
+
</child>
|
84
|
+
<child type="label">
|
85
|
+
<object class="GtkLabel" id="label2">
|
86
|
+
<property name="visible">True</property>
|
87
|
+
<property name="can_focus">False</property>
|
88
|
+
<property name="label" translatable="yes"><b>Choose default source</b></property>
|
89
|
+
<property name="use_markup">True</property>
|
90
|
+
</object>
|
91
|
+
</child>
|
92
|
+
</object>
|
93
|
+
<packing>
|
94
|
+
<property name="resize">True</property>
|
95
|
+
<property name="shrink">True</property>
|
96
|
+
</packing>
|
97
|
+
</child>
|
98
|
+
</object>
|
99
|
+
</child>
|
100
|
+
</object>
|
101
|
+
</interface>
|
@@ -0,0 +1,160 @@
|
|
1
|
+
class PulseAudio::Gui::Choose_active_sink_gtk3
|
2
|
+
attr_reader :ui
|
3
|
+
|
4
|
+
def initialize
|
5
|
+
@ui = Gtk3assist::Builder.new.add_from_file("#{File.dirname(__FILE__)}/choose_active_sink.glade")
|
6
|
+
@ui.connect_signals{|h| method(h)}
|
7
|
+
|
8
|
+
#Init treeviews.
|
9
|
+
@tv_sinks = Gtk3assist::Treeview.new(
|
10
|
+
:tv => @ui["tvSinks"],
|
11
|
+
:model => :liststore,
|
12
|
+
:cols => [
|
13
|
+
{:id => :id, :title => _("ID")},
|
14
|
+
{:id => :name, :title => _("Name")}
|
15
|
+
]
|
16
|
+
)
|
17
|
+
@ui["tvSinks"].get_column(0).visible = false
|
18
|
+
self.reload_sinks
|
19
|
+
|
20
|
+
@tv_sources = Gtk3assist::Treeview.new(
|
21
|
+
:tv => @ui["tvSources"],
|
22
|
+
:model => :liststore,
|
23
|
+
:cols => [_("ID"), _("Name")]
|
24
|
+
)
|
25
|
+
@ui["tvSources"].get_column(0).visible = false
|
26
|
+
self.reload_sources
|
27
|
+
|
28
|
+
PulseAudio::Sink::Input.auto_redirect_new_inputs_to_default_sink
|
29
|
+
PulseAudio::Source::Output.auto_redirect_new_outputs_to_default_source
|
30
|
+
|
31
|
+
@sicon = Gtk::StatusIcon.new
|
32
|
+
@sicon.signal_connect("activate", &self.method(:on_sicon_activate))
|
33
|
+
@sicon.signal_connect("popup-menu", &self.method(:on_sicon_popupmenu))
|
34
|
+
@sicon.signal_connect("scroll-event", &self.method(:on_sicon_scroll))
|
35
|
+
self.update_icon
|
36
|
+
end
|
37
|
+
|
38
|
+
#Updates the statusicons icon based on the current sinks volume.
|
39
|
+
def update_icon
|
40
|
+
#Get the current active sink which should be manipulated.
|
41
|
+
sink_def = PulseAudio::Sink.by_default
|
42
|
+
return nil if !sink_def
|
43
|
+
|
44
|
+
|
45
|
+
#Evaluate which icon is the closest to the current volume.
|
46
|
+
vol_perc = sink_def.vol_perc
|
47
|
+
levels = [0, 33, 66, 100]
|
48
|
+
|
49
|
+
vol_closest = levels.first
|
50
|
+
vol_closest_dif = 100
|
51
|
+
|
52
|
+
levels.each do |level|
|
53
|
+
if !vol_closest or (vol_perc < level and diff = (level - vol_perc) and diff < vol_closest_dif) or (vol_perc >= level and diff = (vol_perc - level) and diff < vol_closest_dif)
|
54
|
+
vol_closest = level
|
55
|
+
vol_closest_dif = diff
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
|
60
|
+
#Set icon.
|
61
|
+
icon_filepath = File.realpath("#{File.dirname(__FILE__)}/../../gfx/volume_#{vol_closest}.png")
|
62
|
+
@sicon.set_from_file(icon_filepath)
|
63
|
+
end
|
64
|
+
|
65
|
+
def on_sicon_activate(*args)
|
66
|
+
if !@ui["window"].get_visible
|
67
|
+
@ui["window"].show_all
|
68
|
+
else
|
69
|
+
@ui["window"].hide
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def on_sicon_scroll(sicon, scroll_e, temp)
|
74
|
+
direction = scroll_e.direction.to_s
|
75
|
+
return nil if direction == "smooth"
|
76
|
+
sink_def = PulseAudio::Sink.by_default
|
77
|
+
|
78
|
+
if direction == "up"
|
79
|
+
sink_def.vol_incr
|
80
|
+
elsif direction == "down"
|
81
|
+
sink_def.vol_decr
|
82
|
+
end
|
83
|
+
|
84
|
+
self.update_icon
|
85
|
+
end
|
86
|
+
|
87
|
+
def on_sicon_popupmenu(*args)
|
88
|
+
Gtk.main_quit
|
89
|
+
end
|
90
|
+
|
91
|
+
def reload_sinks
|
92
|
+
@reloading = true
|
93
|
+
@tv_sinks.model.clear
|
94
|
+
PulseAudio::Sink.list do |sink|
|
95
|
+
append_data = @tv_sinks.add_row(:data => {:id => sink.sink_id, :name => sink.args[:props]["description"]})
|
96
|
+
|
97
|
+
if sink.default?
|
98
|
+
@ui["tvSinks"].selection.select_iter(append_data[:iter])
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
@reloading = false
|
103
|
+
end
|
104
|
+
|
105
|
+
def reload_sources
|
106
|
+
@reloading = true
|
107
|
+
|
108
|
+
@tv_sources.model.clear
|
109
|
+
PulseAudio::Source.list do |source|
|
110
|
+
append_data = @tv_sources.add_row(:data => {:id => source.source_id, :name => source.args[:props]["description"]})
|
111
|
+
|
112
|
+
if source.default?
|
113
|
+
@ui["tvSources"].selection.select_iter(append_data[:iter])
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
@reloading = false
|
118
|
+
end
|
119
|
+
|
120
|
+
def on_tvSinks_cursor_changed(*args)
|
121
|
+
return nil if @reloading or !@tv_sinks
|
122
|
+
sel = @tv_sinks.sel
|
123
|
+
return nil if !sel
|
124
|
+
|
125
|
+
sink = nil
|
126
|
+
PulseAudio::Sink.list do |sink_i|
|
127
|
+
if sink_i.sink_id.to_i == sel[:data][:id].to_i
|
128
|
+
sink = sink_i
|
129
|
+
break
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
raise "Could not find sink." if !sink
|
134
|
+
sink.default!
|
135
|
+
self.update_icon
|
136
|
+
end
|
137
|
+
|
138
|
+
def on_tvSources_cursor_changed(*args)
|
139
|
+
return nil if @reloading or !@tv_sources
|
140
|
+
sel = @tv_sources.sel
|
141
|
+
return nil if !sel
|
142
|
+
|
143
|
+
source = nil
|
144
|
+
PulseAudio::Source.list do |source_i|
|
145
|
+
if source_i.source_id.to_i == sel[:data][:id].to_i
|
146
|
+
source = source_i
|
147
|
+
break
|
148
|
+
end
|
149
|
+
end
|
150
|
+
|
151
|
+
raise "Could not find source." if !source
|
152
|
+
source.default!
|
153
|
+
self.update_icon
|
154
|
+
end
|
155
|
+
|
156
|
+
def on_window_delete_event(*args)
|
157
|
+
@ui["window"].hide
|
158
|
+
return true
|
159
|
+
end
|
160
|
+
end
|
data/include/pulseaudio_sink.rb
CHANGED
@@ -156,6 +156,15 @@ class PulseAudio::Sink
|
|
156
156
|
return nil
|
157
157
|
end
|
158
158
|
|
159
|
+
#Returns the current percent of the volume.
|
160
|
+
def vol_perc
|
161
|
+
if match = @args[:props]["volume"].to_s.match(/(\d+):\s*(\d+)%/)
|
162
|
+
return match[2].to_i
|
163
|
+
end
|
164
|
+
|
165
|
+
raise "Could not figure out the volume."
|
166
|
+
end
|
167
|
+
|
159
168
|
#Returns true if this sink is the default one.
|
160
169
|
def default?
|
161
170
|
def_str = %x[pacmd info | grep "Default sink name"]
|
data/lib/pulseaudio.rb
CHANGED
data/pulseaudio.gemspec
CHANGED
@@ -4,15 +4,14 @@
|
|
4
4
|
# -*- encoding: utf-8 -*-
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
|
-
s.name =
|
8
|
-
s.version = "0.0.
|
7
|
+
s.name = "pulseaudio"
|
8
|
+
s.version = "0.0.5"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Kasper Johansen"]
|
12
|
-
s.date =
|
13
|
-
s.
|
14
|
-
s.
|
15
|
-
s.email = %q{k@spernj.org}
|
12
|
+
s.date = "2012-09-19"
|
13
|
+
s.description = "Ruby-library for controlling PulseAudio via 'pactl'."
|
14
|
+
s.email = "k@spernj.org"
|
16
15
|
s.executables = ["pulseaudio_volume.rb"]
|
17
16
|
s.extra_rdoc_files = [
|
18
17
|
"LICENSE.txt",
|
@@ -28,8 +27,14 @@ Gem::Specification.new do |s|
|
|
28
27
|
"Rakefile",
|
29
28
|
"VERSION",
|
30
29
|
"bin/pulseaudio_volume.rb",
|
30
|
+
"gfx/volume_0.png",
|
31
|
+
"gfx/volume_100.png",
|
32
|
+
"gfx/volume_33.png",
|
33
|
+
"gfx/volume_66.png",
|
31
34
|
"gui/choose_active_sink/choose_active_sink.glade",
|
32
35
|
"gui/choose_active_sink/choose_active_sink.rb",
|
36
|
+
"gui/choose_active_sink_gtk3/choose_active_sink.glade",
|
37
|
+
"gui/choose_active_sink_gtk3/choose_active_sink_gtk3.rb",
|
33
38
|
"include/pulseaudio_events.rb",
|
34
39
|
"include/pulseaudio_gui.rb",
|
35
40
|
"include/pulseaudio_sink.rb",
|
@@ -41,39 +46,46 @@ Gem::Specification.new do |s|
|
|
41
46
|
"spec/pulseaudio_spec.rb",
|
42
47
|
"spec/spec_helper.rb",
|
43
48
|
"test_scripts/choose_active_sink.rb",
|
49
|
+
"test_scripts/choose_active_sink_gtk3.rb",
|
44
50
|
"test_scripts/set_active.rb"
|
45
51
|
]
|
46
|
-
s.homepage =
|
52
|
+
s.homepage = "http://github.com/kaspernj/pulseaudio"
|
47
53
|
s.licenses = ["MIT"]
|
48
54
|
s.require_paths = ["lib"]
|
49
|
-
s.rubygems_version =
|
50
|
-
s.summary =
|
55
|
+
s.rubygems_version = "1.8.24"
|
56
|
+
s.summary = "Ruby-library for controlling PulseAudio."
|
51
57
|
|
52
58
|
if s.respond_to? :specification_version then
|
53
59
|
s.specification_version = 3
|
54
60
|
|
55
61
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
56
62
|
s.add_runtime_dependency(%q<wref>, [">= 0"])
|
63
|
+
s.add_runtime_dependency(%q<gir_ffi>, [">= 0"])
|
64
|
+
s.add_runtime_dependency(%q<gtk3assist>, [">= 0"])
|
65
|
+
s.add_runtime_dependency(%q<gettext>, [">= 0"])
|
57
66
|
s.add_development_dependency(%q<rspec>, ["~> 2.8.0"])
|
58
67
|
s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
|
59
68
|
s.add_development_dependency(%q<bundler>, [">= 1.0.0"])
|
60
69
|
s.add_development_dependency(%q<jeweler>, ["~> 1.8.3"])
|
61
|
-
s.add_development_dependency(%q<rcov>, [">= 0"])
|
62
70
|
else
|
63
71
|
s.add_dependency(%q<wref>, [">= 0"])
|
72
|
+
s.add_dependency(%q<gir_ffi>, [">= 0"])
|
73
|
+
s.add_dependency(%q<gtk3assist>, [">= 0"])
|
74
|
+
s.add_dependency(%q<gettext>, [">= 0"])
|
64
75
|
s.add_dependency(%q<rspec>, ["~> 2.8.0"])
|
65
76
|
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
66
77
|
s.add_dependency(%q<bundler>, [">= 1.0.0"])
|
67
78
|
s.add_dependency(%q<jeweler>, ["~> 1.8.3"])
|
68
|
-
s.add_dependency(%q<rcov>, [">= 0"])
|
69
79
|
end
|
70
80
|
else
|
71
81
|
s.add_dependency(%q<wref>, [">= 0"])
|
82
|
+
s.add_dependency(%q<gir_ffi>, [">= 0"])
|
83
|
+
s.add_dependency(%q<gtk3assist>, [">= 0"])
|
84
|
+
s.add_dependency(%q<gettext>, [">= 0"])
|
72
85
|
s.add_dependency(%q<rspec>, ["~> 2.8.0"])
|
73
86
|
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
74
87
|
s.add_dependency(%q<bundler>, [">= 1.0.0"])
|
75
88
|
s.add_dependency(%q<jeweler>, ["~> 1.8.3"])
|
76
|
-
s.add_dependency(%q<rcov>, [">= 0"])
|
77
89
|
end
|
78
90
|
end
|
79
91
|
|
@@ -0,0 +1,26 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
Dir.chdir(File.dirname(__FILE__))
|
4
|
+
require "../lib/pulseaudio.rb"
|
5
|
+
|
6
|
+
require "rubygems"
|
7
|
+
require "gir_ffi"
|
8
|
+
require "gir_ffi-gtk3"
|
9
|
+
require "/home/kaspernj/Dev/Ruby/Gems/knjrbfw/lib/knjrbfw.rb"
|
10
|
+
require "gettext"
|
11
|
+
Knj.gem_require(:Gtk3assist, "gtk3assist")
|
12
|
+
|
13
|
+
Gtk3assist.enable_threadding
|
14
|
+
|
15
|
+
def _(str)
|
16
|
+
return GetText._(str)
|
17
|
+
end
|
18
|
+
|
19
|
+
Gtk.init
|
20
|
+
|
21
|
+
cas = PulseAudio::Gui::Choose_active_sink_gtk3.new
|
22
|
+
cas.ui["window"].signal_connect("destroy") do
|
23
|
+
Gtk.main_quit
|
24
|
+
end
|
25
|
+
|
26
|
+
Gtk.main
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: pulseaudio
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.5
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Kasper Johansen
|
@@ -10,8 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2012-
|
14
|
-
default_executable: pulseaudio_volume.rb
|
13
|
+
date: 2012-09-19 00:00:00 Z
|
15
14
|
dependencies:
|
16
15
|
- !ruby/object:Gem::Dependency
|
17
16
|
name: wref
|
@@ -25,60 +24,82 @@ dependencies:
|
|
25
24
|
prerelease: false
|
26
25
|
version_requirements: *id001
|
27
26
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
27
|
+
name: gir_ffi
|
29
28
|
requirement: &id002 !ruby/object:Gem::Requirement
|
30
29
|
none: false
|
31
30
|
requirements:
|
32
|
-
- -
|
31
|
+
- - ">="
|
33
32
|
- !ruby/object:Gem::Version
|
34
|
-
version:
|
35
|
-
type: :
|
33
|
+
version: "0"
|
34
|
+
type: :runtime
|
36
35
|
prerelease: false
|
37
36
|
version_requirements: *id002
|
38
37
|
- !ruby/object:Gem::Dependency
|
39
|
-
name:
|
38
|
+
name: gtk3assist
|
40
39
|
requirement: &id003 !ruby/object:Gem::Requirement
|
41
40
|
none: false
|
42
41
|
requirements:
|
43
|
-
- -
|
42
|
+
- - ">="
|
44
43
|
- !ruby/object:Gem::Version
|
45
|
-
version: "
|
46
|
-
type: :
|
44
|
+
version: "0"
|
45
|
+
type: :runtime
|
47
46
|
prerelease: false
|
48
47
|
version_requirements: *id003
|
49
48
|
- !ruby/object:Gem::Dependency
|
50
|
-
name:
|
49
|
+
name: gettext
|
51
50
|
requirement: &id004 !ruby/object:Gem::Requirement
|
52
51
|
none: false
|
53
52
|
requirements:
|
54
53
|
- - ">="
|
55
54
|
- !ruby/object:Gem::Version
|
56
|
-
version:
|
57
|
-
type: :
|
55
|
+
version: "0"
|
56
|
+
type: :runtime
|
58
57
|
prerelease: false
|
59
58
|
version_requirements: *id004
|
60
59
|
- !ruby/object:Gem::Dependency
|
61
|
-
name:
|
60
|
+
name: rspec
|
62
61
|
requirement: &id005 !ruby/object:Gem::Requirement
|
63
62
|
none: false
|
64
63
|
requirements:
|
65
64
|
- - ~>
|
66
65
|
- !ruby/object:Gem::Version
|
67
|
-
version:
|
66
|
+
version: 2.8.0
|
68
67
|
type: :development
|
69
68
|
prerelease: false
|
70
69
|
version_requirements: *id005
|
71
70
|
- !ruby/object:Gem::Dependency
|
72
|
-
name:
|
71
|
+
name: rdoc
|
73
72
|
requirement: &id006 !ruby/object:Gem::Requirement
|
74
73
|
none: false
|
75
74
|
requirements:
|
76
|
-
- -
|
75
|
+
- - ~>
|
77
76
|
- !ruby/object:Gem::Version
|
78
|
-
version: "
|
77
|
+
version: "3.12"
|
79
78
|
type: :development
|
80
79
|
prerelease: false
|
81
80
|
version_requirements: *id006
|
81
|
+
- !ruby/object:Gem::Dependency
|
82
|
+
name: bundler
|
83
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
84
|
+
none: false
|
85
|
+
requirements:
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: 1.0.0
|
89
|
+
type: :development
|
90
|
+
prerelease: false
|
91
|
+
version_requirements: *id007
|
92
|
+
- !ruby/object:Gem::Dependency
|
93
|
+
name: jeweler
|
94
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
95
|
+
none: false
|
96
|
+
requirements:
|
97
|
+
- - ~>
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: 1.8.3
|
100
|
+
type: :development
|
101
|
+
prerelease: false
|
102
|
+
version_requirements: *id008
|
82
103
|
description: Ruby-library for controlling PulseAudio via 'pactl'.
|
83
104
|
email: k@spernj.org
|
84
105
|
executables:
|
@@ -98,8 +119,14 @@ files:
|
|
98
119
|
- Rakefile
|
99
120
|
- VERSION
|
100
121
|
- bin/pulseaudio_volume.rb
|
122
|
+
- gfx/volume_0.png
|
123
|
+
- gfx/volume_100.png
|
124
|
+
- gfx/volume_33.png
|
125
|
+
- gfx/volume_66.png
|
101
126
|
- gui/choose_active_sink/choose_active_sink.glade
|
102
127
|
- gui/choose_active_sink/choose_active_sink.rb
|
128
|
+
- gui/choose_active_sink_gtk3/choose_active_sink.glade
|
129
|
+
- gui/choose_active_sink_gtk3/choose_active_sink_gtk3.rb
|
103
130
|
- include/pulseaudio_events.rb
|
104
131
|
- include/pulseaudio_gui.rb
|
105
132
|
- include/pulseaudio_sink.rb
|
@@ -111,8 +138,8 @@ files:
|
|
111
138
|
- spec/pulseaudio_spec.rb
|
112
139
|
- spec/spec_helper.rb
|
113
140
|
- test_scripts/choose_active_sink.rb
|
141
|
+
- test_scripts/choose_active_sink_gtk3.rb
|
114
142
|
- test_scripts/set_active.rb
|
115
|
-
has_rdoc: true
|
116
143
|
homepage: http://github.com/kaspernj/pulseaudio
|
117
144
|
licenses:
|
118
145
|
- MIT
|
@@ -126,7 +153,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
126
153
|
requirements:
|
127
154
|
- - ">="
|
128
155
|
- !ruby/object:Gem::Version
|
129
|
-
hash: -
|
156
|
+
hash: -2237121306229402843
|
130
157
|
segments:
|
131
158
|
- 0
|
132
159
|
version: "0"
|
@@ -139,7 +166,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
139
166
|
requirements: []
|
140
167
|
|
141
168
|
rubyforge_project:
|
142
|
-
rubygems_version: 1.
|
169
|
+
rubygems_version: 1.8.24
|
143
170
|
signing_key:
|
144
171
|
specification_version: 3
|
145
172
|
summary: Ruby-library for controlling PulseAudio.
|