pulseaudio 0.0.5 → 0.0.6
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 +1 -0
- data/Gemfile.lock +13 -0
- data/VERSION +1 -1
- data/gui/choose_active_sink_gtk3/choose_active_sink.glade +29 -9
- data/gui/choose_active_sink_gtk3/choose_active_sink_gtk3.rb +93 -29
- data/include/pulseaudio_gui.rb +1 -1
- data/pulseaudio.gemspec +5 -2
- data/test_scripts/choose_active_sink_gtk3.rb +10 -4
- metadata +22 -11
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
GEM
|
2
2
|
remote: http://rubygems.org/
|
3
3
|
specs:
|
4
|
+
datet (0.0.20)
|
4
5
|
diff-lcs (1.1.3)
|
5
6
|
ffi (1.0.11)
|
6
7
|
gettext (2.3.1)
|
@@ -14,6 +15,7 @@ GEM
|
|
14
15
|
gtk3assist (0.0.5)
|
15
16
|
gir_ffi-gtk
|
16
17
|
xml-simple
|
18
|
+
http2 (0.0.11)
|
17
19
|
indentation (0.0.6)
|
18
20
|
jeweler (1.8.4)
|
19
21
|
bundler (~> 1.0)
|
@@ -21,7 +23,16 @@ GEM
|
|
21
23
|
rake
|
22
24
|
rdoc
|
23
25
|
json (1.7.5)
|
26
|
+
knjrbfw (0.0.99)
|
27
|
+
datet
|
28
|
+
http2
|
29
|
+
php4r
|
30
|
+
tsafe
|
31
|
+
wref
|
24
32
|
locale (2.0.8)
|
33
|
+
php4r (0.0.3)
|
34
|
+
datet
|
35
|
+
http2
|
25
36
|
rake (0.9.2.2)
|
26
37
|
rdoc (3.12)
|
27
38
|
json (~> 1.4)
|
@@ -33,6 +44,7 @@ GEM
|
|
33
44
|
rspec-expectations (2.8.0)
|
34
45
|
diff-lcs (~> 1.1.2)
|
35
46
|
rspec-mocks (2.8.0)
|
47
|
+
tsafe (0.0.11)
|
36
48
|
wref (0.0.5)
|
37
49
|
xml-simple (1.1.1)
|
38
50
|
|
@@ -45,6 +57,7 @@ DEPENDENCIES
|
|
45
57
|
gir_ffi
|
46
58
|
gtk3assist
|
47
59
|
jeweler (~> 1.8.3)
|
60
|
+
knjrbfw
|
48
61
|
rdoc (~> 3.12)
|
49
62
|
rspec (~> 2.8.0)
|
50
63
|
wref
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.6
|
@@ -27,12 +27,25 @@
|
|
27
27
|
<property name="can_focus">False</property>
|
28
28
|
<property name="left_padding">12</property>
|
29
29
|
<child>
|
30
|
-
<object class="
|
30
|
+
<object class="GtkViewport" id="viewport1">
|
31
31
|
<property name="visible">True</property>
|
32
|
-
<property name="can_focus">
|
33
|
-
<
|
34
|
-
|
35
|
-
|
32
|
+
<property name="can_focus">False</property>
|
33
|
+
<child>
|
34
|
+
<object class="GtkScrolledWindow" id="scrolledwindow2">
|
35
|
+
<property name="visible">True</property>
|
36
|
+
<property name="can_focus">True</property>
|
37
|
+
<property name="shadow_type">in</property>
|
38
|
+
<child>
|
39
|
+
<object class="GtkTreeView" id="tvSinks">
|
40
|
+
<property name="visible">True</property>
|
41
|
+
<property name="can_focus">True</property>
|
42
|
+
<signal name="cursor-changed" handler="on_tvSinks_cursor_changed" swapped="no"/>
|
43
|
+
<child internal-child="selection">
|
44
|
+
<object class="GtkTreeSelection" id="treeview-selection1"/>
|
45
|
+
</child>
|
46
|
+
</object>
|
47
|
+
</child>
|
48
|
+
</object>
|
36
49
|
</child>
|
37
50
|
</object>
|
38
51
|
</child>
|
@@ -68,12 +81,19 @@
|
|
68
81
|
<property name="visible">True</property>
|
69
82
|
<property name="can_focus">False</property>
|
70
83
|
<child>
|
71
|
-
<object class="
|
84
|
+
<object class="GtkScrolledWindow" id="scrolledwindow1">
|
72
85
|
<property name="visible">True</property>
|
73
86
|
<property name="can_focus">True</property>
|
74
|
-
<
|
75
|
-
<child
|
76
|
-
<object class="
|
87
|
+
<property name="shadow_type">in</property>
|
88
|
+
<child>
|
89
|
+
<object class="GtkTreeView" id="tvSources">
|
90
|
+
<property name="visible">True</property>
|
91
|
+
<property name="can_focus">True</property>
|
92
|
+
<signal name="cursor-changed" handler="on_tvSources_cursor_changed" swapped="no"/>
|
93
|
+
<child internal-child="selection">
|
94
|
+
<object class="GtkTreeSelection" id="treeview-selection"/>
|
95
|
+
</child>
|
96
|
+
</object>
|
77
97
|
</child>
|
78
98
|
</object>
|
79
99
|
</child>
|
@@ -9,6 +9,7 @@ class PulseAudio::Gui::Choose_active_sink_gtk3
|
|
9
9
|
@tv_sinks = Gtk3assist::Treeview.new(
|
10
10
|
:tv => @ui["tvSinks"],
|
11
11
|
:model => :liststore,
|
12
|
+
:sort_col => :name,
|
12
13
|
:cols => [
|
13
14
|
{:id => :id, :title => _("ID")},
|
14
15
|
{:id => :name, :title => _("Name")}
|
@@ -20,7 +21,11 @@ class PulseAudio::Gui::Choose_active_sink_gtk3
|
|
20
21
|
@tv_sources = Gtk3assist::Treeview.new(
|
21
22
|
:tv => @ui["tvSources"],
|
22
23
|
:model => :liststore,
|
23
|
-
:
|
24
|
+
:sort_col => :name,
|
25
|
+
:cols => [
|
26
|
+
{:id => :id, :title => _("ID")},
|
27
|
+
{:id => :name, :title => _("Name")}
|
28
|
+
]
|
24
29
|
)
|
25
30
|
@ui["tvSources"].get_column(0).visible = false
|
26
31
|
self.reload_sources
|
@@ -28,6 +33,10 @@ class PulseAudio::Gui::Choose_active_sink_gtk3
|
|
28
33
|
PulseAudio::Sink::Input.auto_redirect_new_inputs_to_default_sink
|
29
34
|
PulseAudio::Source::Output.auto_redirect_new_outputs_to_default_source
|
30
35
|
|
36
|
+
events = PulseAudio::Events.instance
|
37
|
+
events.connect(:event => :remove, &self.method(:on_remove))
|
38
|
+
events.connect(:event => :new, &self.method(:on_new))
|
39
|
+
|
31
40
|
@sicon = Gtk::StatusIcon.new
|
32
41
|
@sicon.signal_connect("activate", &self.method(:on_sicon_activate))
|
33
42
|
@sicon.signal_connect("popup-menu", &self.method(:on_sicon_popupmenu))
|
@@ -35,6 +44,42 @@ class PulseAudio::Gui::Choose_active_sink_gtk3
|
|
35
44
|
self.update_icon
|
36
45
|
end
|
37
46
|
|
47
|
+
#Called when something is removed from PulseAudio. Removes items from the treeviews automatically.
|
48
|
+
def on_remove(args)
|
49
|
+
event, ele, ele_id = args[:args][:event].to_sym, args[:args][:element].to_s, args[:args][:element_id].to_i
|
50
|
+
|
51
|
+
if ele == "sink"
|
52
|
+
tv = @tv_sinks
|
53
|
+
elsif ele == "source"
|
54
|
+
tv = @tv_sources
|
55
|
+
else
|
56
|
+
return nil
|
57
|
+
end
|
58
|
+
|
59
|
+
tv.rows_remove do |data|
|
60
|
+
if data[:data][:id].to_i == ele_id
|
61
|
+
true
|
62
|
+
else
|
63
|
+
false
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
#Called when something is added to PulseAudio. Adds new items to the treeviews automatically.
|
69
|
+
def on_new(args)
|
70
|
+
event, ele, ele_id = args[:args][:event].to_sym, args[:args][:element].to_s, args[:args][:element_id].to_i
|
71
|
+
|
72
|
+
if ele == "sink"
|
73
|
+
sink = PulseAudio::Sink.by_id(ele_id.to_i)
|
74
|
+
self.add_sink(sink)
|
75
|
+
elsif ele == "source"
|
76
|
+
source = PulseAudio::Source.by_id(ele_id.to_i)
|
77
|
+
self.add_source(source)
|
78
|
+
else
|
79
|
+
return nil
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
38
83
|
#Updates the statusicons icon based on the current sinks volume.
|
39
84
|
def update_icon
|
40
85
|
#Get the current active sink which should be manipulated.
|
@@ -88,11 +133,16 @@ class PulseAudio::Gui::Choose_active_sink_gtk3
|
|
88
133
|
Gtk.main_quit
|
89
134
|
end
|
90
135
|
|
136
|
+
def add_sink(sink)
|
137
|
+
append_data = @tv_sinks.add_row(:data => {:id => sink.sink_id, :name => sink.args[:props]["description"]})
|
138
|
+
return append_data
|
139
|
+
end
|
140
|
+
|
91
141
|
def reload_sinks
|
92
142
|
@reloading = true
|
93
143
|
@tv_sinks.model.clear
|
94
144
|
PulseAudio::Sink.list do |sink|
|
95
|
-
append_data =
|
145
|
+
append_data = self.add_sink(sink)
|
96
146
|
|
97
147
|
if sink.default?
|
98
148
|
@ui["tvSinks"].selection.select_iter(append_data[:iter])
|
@@ -102,12 +152,17 @@ class PulseAudio::Gui::Choose_active_sink_gtk3
|
|
102
152
|
@reloading = false
|
103
153
|
end
|
104
154
|
|
155
|
+
def add_source(source)
|
156
|
+
append_data = @tv_sources.add_row(:data => {:id => source.source_id, :name => source.args[:props]["description"]})
|
157
|
+
return append_data
|
158
|
+
end
|
159
|
+
|
105
160
|
def reload_sources
|
106
161
|
@reloading = true
|
107
162
|
|
108
163
|
@tv_sources.model.clear
|
109
164
|
PulseAudio::Source.list do |source|
|
110
|
-
append_data =
|
165
|
+
append_data = self.add_source(source)
|
111
166
|
|
112
167
|
if source.default?
|
113
168
|
@ui["tvSources"].selection.select_iter(append_data[:iter])
|
@@ -118,39 +173,48 @@ class PulseAudio::Gui::Choose_active_sink_gtk3
|
|
118
173
|
end
|
119
174
|
|
120
175
|
def on_tvSinks_cursor_changed(*args)
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
176
|
+
begin
|
177
|
+
return nil if @reloading or !@tv_sinks
|
178
|
+
sel = @tv_sinks.sel
|
179
|
+
return nil if !sel
|
180
|
+
puts sel
|
181
|
+
|
182
|
+
sink = nil
|
183
|
+
PulseAudio::Sink.list do |sink_i|
|
184
|
+
if sink_i.sink_id.to_i == sel[:data][:id].to_i
|
185
|
+
sink = sink_i
|
186
|
+
break
|
187
|
+
end
|
130
188
|
end
|
189
|
+
|
190
|
+
raise "Could not find sink." if !sink
|
191
|
+
sink.default!
|
192
|
+
self.update_icon
|
193
|
+
rescue => e
|
194
|
+
Gtk3assist::Msgbox.error(e)
|
131
195
|
end
|
132
|
-
|
133
|
-
raise "Could not find sink." if !sink
|
134
|
-
sink.default!
|
135
|
-
self.update_icon
|
136
196
|
end
|
137
197
|
|
138
198
|
def on_tvSources_cursor_changed(*args)
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
199
|
+
begin
|
200
|
+
return nil if @reloading or !@tv_sources
|
201
|
+
sel = @tv_sources.sel
|
202
|
+
return nil if !sel
|
203
|
+
|
204
|
+
source = nil
|
205
|
+
PulseAudio::Source.list do |source_i|
|
206
|
+
if source_i.source_id.to_i == sel[:data][:id].to_i
|
207
|
+
source = source_i
|
208
|
+
break
|
209
|
+
end
|
148
210
|
end
|
211
|
+
|
212
|
+
raise "Could not find source." if !source
|
213
|
+
source.default!
|
214
|
+
self.update_icon
|
215
|
+
rescue => e
|
216
|
+
Gtk3assist::Msgbox.error(e)
|
149
217
|
end
|
150
|
-
|
151
|
-
raise "Could not find source." if !source
|
152
|
-
source.default!
|
153
|
-
self.update_icon
|
154
218
|
end
|
155
219
|
|
156
220
|
def on_window_delete_event(*args)
|
data/include/pulseaudio_gui.rb
CHANGED
data/pulseaudio.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "pulseaudio"
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.6"
|
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 = "2012-09-
|
12
|
+
s.date = "2012-09-30"
|
13
13
|
s.description = "Ruby-library for controlling PulseAudio via 'pactl'."
|
14
14
|
s.email = "k@spernj.org"
|
15
15
|
s.executables = ["pulseaudio_volume.rb"]
|
@@ -63,6 +63,7 @@ Gem::Specification.new do |s|
|
|
63
63
|
s.add_runtime_dependency(%q<gir_ffi>, [">= 0"])
|
64
64
|
s.add_runtime_dependency(%q<gtk3assist>, [">= 0"])
|
65
65
|
s.add_runtime_dependency(%q<gettext>, [">= 0"])
|
66
|
+
s.add_runtime_dependency(%q<knjrbfw>, [">= 0"])
|
66
67
|
s.add_development_dependency(%q<rspec>, ["~> 2.8.0"])
|
67
68
|
s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
|
68
69
|
s.add_development_dependency(%q<bundler>, [">= 1.0.0"])
|
@@ -72,6 +73,7 @@ Gem::Specification.new do |s|
|
|
72
73
|
s.add_dependency(%q<gir_ffi>, [">= 0"])
|
73
74
|
s.add_dependency(%q<gtk3assist>, [">= 0"])
|
74
75
|
s.add_dependency(%q<gettext>, [">= 0"])
|
76
|
+
s.add_dependency(%q<knjrbfw>, [">= 0"])
|
75
77
|
s.add_dependency(%q<rspec>, ["~> 2.8.0"])
|
76
78
|
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
77
79
|
s.add_dependency(%q<bundler>, [">= 1.0.0"])
|
@@ -82,6 +84,7 @@ Gem::Specification.new do |s|
|
|
82
84
|
s.add_dependency(%q<gir_ffi>, [">= 0"])
|
83
85
|
s.add_dependency(%q<gtk3assist>, [">= 0"])
|
84
86
|
s.add_dependency(%q<gettext>, [">= 0"])
|
87
|
+
s.add_dependency(%q<knjrbfw>, [">= 0"])
|
85
88
|
s.add_dependency(%q<rspec>, ["~> 2.8.0"])
|
86
89
|
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
87
90
|
s.add_dependency(%q<bundler>, [">= 1.0.0"])
|
@@ -1,16 +1,22 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
|
4
|
-
require "../lib/pulseaudio.rb"
|
3
|
+
require "#{File.realpath(File.dirname(__FILE__))}/../lib/pulseaudio.rb"
|
5
4
|
|
6
5
|
require "rubygems"
|
7
6
|
require "gir_ffi"
|
8
7
|
require "gir_ffi-gtk3"
|
9
|
-
require "/home/kaspernj/Dev/Ruby/Gems/knjrbfw/lib/knjrbfw.rb"
|
10
8
|
require "gettext"
|
9
|
+
|
10
|
+
#Try to load development-version of 'knjrbfw'.
|
11
|
+
begin
|
12
|
+
require "#{File.realpath(File.dirname(__FILE__))}/../../knjrbfw/lib/knjrbfw.rb"
|
13
|
+
rescue LoadError
|
14
|
+
require "knjrbfw"
|
15
|
+
end
|
16
|
+
|
11
17
|
Knj.gem_require(:Gtk3assist, "gtk3assist")
|
12
18
|
|
13
|
-
Gtk3assist.enable_threadding
|
19
|
+
Gtk3assist::Threadding.enable_threadding
|
14
20
|
|
15
21
|
def _(str)
|
16
22
|
return GetText._(str)
|
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.6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Kasper Johansen
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2012-09-
|
13
|
+
date: 2012-09-30 00:00:00 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: wref
|
@@ -57,8 +57,19 @@ dependencies:
|
|
57
57
|
prerelease: false
|
58
58
|
version_requirements: *id004
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
|
-
name:
|
60
|
+
name: knjrbfw
|
61
61
|
requirement: &id005 !ruby/object:Gem::Requirement
|
62
|
+
none: false
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: "0"
|
67
|
+
type: :runtime
|
68
|
+
prerelease: false
|
69
|
+
version_requirements: *id005
|
70
|
+
- !ruby/object:Gem::Dependency
|
71
|
+
name: rspec
|
72
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
62
73
|
none: false
|
63
74
|
requirements:
|
64
75
|
- - ~>
|
@@ -66,10 +77,10 @@ dependencies:
|
|
66
77
|
version: 2.8.0
|
67
78
|
type: :development
|
68
79
|
prerelease: false
|
69
|
-
version_requirements: *
|
80
|
+
version_requirements: *id006
|
70
81
|
- !ruby/object:Gem::Dependency
|
71
82
|
name: rdoc
|
72
|
-
requirement: &
|
83
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
73
84
|
none: false
|
74
85
|
requirements:
|
75
86
|
- - ~>
|
@@ -77,10 +88,10 @@ dependencies:
|
|
77
88
|
version: "3.12"
|
78
89
|
type: :development
|
79
90
|
prerelease: false
|
80
|
-
version_requirements: *
|
91
|
+
version_requirements: *id007
|
81
92
|
- !ruby/object:Gem::Dependency
|
82
93
|
name: bundler
|
83
|
-
requirement: &
|
94
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
84
95
|
none: false
|
85
96
|
requirements:
|
86
97
|
- - ">="
|
@@ -88,10 +99,10 @@ dependencies:
|
|
88
99
|
version: 1.0.0
|
89
100
|
type: :development
|
90
101
|
prerelease: false
|
91
|
-
version_requirements: *
|
102
|
+
version_requirements: *id008
|
92
103
|
- !ruby/object:Gem::Dependency
|
93
104
|
name: jeweler
|
94
|
-
requirement: &
|
105
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
95
106
|
none: false
|
96
107
|
requirements:
|
97
108
|
- - ~>
|
@@ -99,7 +110,7 @@ dependencies:
|
|
99
110
|
version: 1.8.3
|
100
111
|
type: :development
|
101
112
|
prerelease: false
|
102
|
-
version_requirements: *
|
113
|
+
version_requirements: *id009
|
103
114
|
description: Ruby-library for controlling PulseAudio via 'pactl'.
|
104
115
|
email: k@spernj.org
|
105
116
|
executables:
|
@@ -153,7 +164,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
153
164
|
requirements:
|
154
165
|
- - ">="
|
155
166
|
- !ruby/object:Gem::Version
|
156
|
-
hash: -
|
167
|
+
hash: -1301824168619278043
|
157
168
|
segments:
|
158
169
|
- 0
|
159
170
|
version: "0"
|