pulseaudio 0.0.4 → 0.0.5
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.
- 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.
|