dxmms2 1.0.0 → 1.2.0
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 +5 -5
- data/Makefile +1 -1
- data/bin/dxmms2 +108 -50
- data/dxmms2.gemspec +5 -5
- metadata +26 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 9e61c4e0f10fc0beb482c379d0f1372dbc67b64c9228ffb71644c2d86fd22cb9
|
4
|
+
data.tar.gz: 1cc2a18957934ac95e0d1d07abaa27b589c2aa8c3de450176f0c5b3dec8fb7e9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4fdfc9ff13a2d073f1a3069d0a19e43bd92d4f31c0b5823f1af5daa0140407901003f79095a8c03b7f182845fdace37cf7204ec12d71aa8d8801c13cefc0310c
|
7
|
+
data.tar.gz: 8dc76fbe4a8e853f082f7f6ab17229bd678e2fedf35d21015a40bce009bba0bf171fb93dc4c2cebc47d02e7ab84b69698d9bd430dd59a8848dda160ee5345127
|
data/Makefile
CHANGED
data/bin/dxmms2
CHANGED
@@ -18,14 +18,17 @@ end
|
|
18
18
|
# for dmenu #
|
19
19
|
##########################
|
20
20
|
|
21
|
+
# XXX: I ruby doesn't designate keyword arguments with =, it just helps me
|
22
|
+
# remember what some arguments are
|
23
|
+
|
21
24
|
$xc = Xmms::client("dxmms2")
|
22
25
|
|
23
|
-
$COMMAND_SIG = "
|
26
|
+
$COMMAND_SIG = ","
|
24
27
|
# default configs {{{
|
25
28
|
$SCREEN_WIDTH=Integer(ENV.fetch('DXMMS2_MENU_WIDTH', 600))
|
26
29
|
$FONT_WIDTH=Integer(ENV.fetch('DXMMS2_FONT_WIDTH', 13)) #in pixels)
|
27
30
|
$BG_COLOR=ENV.fetch('DMENU_BG_COLOR', '#000000')
|
28
|
-
$FG_COLOR=ENV.fetch('DMENU_FG_COLOR', '#
|
31
|
+
$FG_COLOR=ENV.fetch('DMENU_FG_COLOR', '#268bd2')
|
29
32
|
$SEL_BG_COLOR=ENV.fetch('DMENU_SEL_BG_COLOR', $FG_COLOR)
|
30
33
|
$SEL_FG_COLOR=ENV.fetch('DMENU_SEL_FG_COLOR', $BG_COLOR)
|
31
34
|
if $GLIB
|
@@ -37,7 +40,7 @@ if $GLIB
|
|
37
40
|
$MUSIC_DIRECTORY = ENV.fetch('DXMMS2_MUSIC_DIRECTORY', fallback)
|
38
41
|
end
|
39
42
|
|
40
|
-
$FONT = ENV.fetch('DMENU_FONT', 'Noto Sans Mono CJK JP
|
43
|
+
$FONT = ENV.fetch('DMENU_FONT', 'Noto Sans Mono CJK JP Bold')
|
41
44
|
$FONT = $FONT + ':pixelsize=' + $FONT_WIDTH.to_s
|
42
45
|
$LIST_ENTRIES_PER_PAGE = 15
|
43
46
|
$LINE_HEIGHT=10
|
@@ -48,9 +51,10 @@ $LINE_HEIGHT=10
|
|
48
51
|
#fi
|
49
52
|
class Integer
|
50
53
|
def ms_to_time_string
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
+
sgn = self >= 0 ? '' : '-'
|
55
|
+
minutes=(self.abs / 60000)
|
56
|
+
seconds=(self.abs % 60000) / 1000
|
57
|
+
"%s%d:%02d" % [sgn, minutes, seconds]
|
54
58
|
end
|
55
59
|
end
|
56
60
|
|
@@ -58,14 +62,16 @@ def time_string_to_ms(str)
|
|
58
62
|
res = 0
|
59
63
|
s = 1
|
60
64
|
for n in str.split(":").reverse do
|
61
|
-
s = 60 * s
|
62
65
|
res = res + s * (n.to_i)
|
66
|
+
s = 60 * s
|
63
67
|
end
|
64
|
-
return res.to_i
|
68
|
+
return res.to_i * 1000
|
65
69
|
end
|
66
70
|
|
67
|
-
def my_dmenu
|
68
|
-
|
71
|
+
def my_dmenu(entries, prompt='dxmms2', height=nil, width=$SCREEN_WIDTH)
|
72
|
+
if height.nil?
|
73
|
+
height = [entries.length, 20].min
|
74
|
+
end
|
69
75
|
Dmenu::dmenu(entries, prompt, height, width,
|
70
76
|
$FG_COLOR,
|
71
77
|
$BG_COLOR,
|
@@ -100,8 +106,8 @@ def list_ids(entries, prompt, start=0, nentries=nil, commands=nil)
|
|
100
106
|
# XXX: Create a list object to pass to user-supplied commands
|
101
107
|
# list object allows for setting list start, page size, list content,
|
102
108
|
# whether to redisplay the list, and maybe other things
|
103
|
-
morestring,endstring,startstring,backstring =
|
104
|
-
%w[more end start back].map{|w| $COMMAND_SIG + w}
|
109
|
+
morestring,endstring,startstring,backstring,allstring,pagedstring =
|
110
|
+
%w[more end start back all paged].map{|w| $COMMAND_SIG + w}
|
105
111
|
if commands.nil?
|
106
112
|
commands = Hash.new
|
107
113
|
end
|
@@ -111,9 +117,10 @@ def list_ids(entries, prompt, start=0, nentries=nil, commands=nil)
|
|
111
117
|
c1[$COMMAND_SIG + k] = v
|
112
118
|
end
|
113
119
|
listing=1
|
114
|
-
nentries = (nentries.nil? ? $LIST_ENTRIES_PER_PAGE : nentries)
|
120
|
+
nentries = nentries_orig = (nentries.nil? ? $LIST_ENTRIES_PER_PAGE : nentries)
|
115
121
|
pos = nil
|
116
122
|
list_start = start
|
123
|
+
paged = true
|
117
124
|
while ( listing == 1 ) do
|
118
125
|
start_clamped = false
|
119
126
|
end_clamped = false
|
@@ -125,7 +132,7 @@ def list_ids(entries, prompt, start=0, nentries=nil, commands=nil)
|
|
125
132
|
list_end = list_start + nentries
|
126
133
|
|
127
134
|
#clamps end
|
128
|
-
(list_end
|
135
|
+
(list_end >= entries.length) and (list_end = entries.length ; end_clamped = true)
|
129
136
|
|
130
137
|
|
131
138
|
nw = list_end.to_s.length
|
@@ -147,11 +154,20 @@ def list_ids(entries, prompt, start=0, nentries=nil, commands=nil)
|
|
147
154
|
items << morestring
|
148
155
|
end
|
149
156
|
|
157
|
+
if nentries < entries.length or list_start != 0
|
158
|
+
items << allstring
|
159
|
+
end
|
160
|
+
|
161
|
+
if nentries == entries.length
|
162
|
+
items << pagedstring
|
163
|
+
end
|
164
|
+
|
150
165
|
c1.keys.each do |d|
|
151
166
|
items << d
|
152
167
|
end
|
153
168
|
|
154
|
-
|
169
|
+
list_len = paged ? items.length : 20
|
170
|
+
choice = my_dmenu(items, prompt, list_len).gsub(/^\s+|\s+$/, "")
|
155
171
|
pos = choice[/^-?\d+|#{$COMMAND_SIG}[a-zA-Z0-9\-_.]+/]
|
156
172
|
|
157
173
|
case pos
|
@@ -163,6 +179,14 @@ def list_ids(entries, prompt, start=0, nentries=nil, commands=nil)
|
|
163
179
|
list_start = entries.length - nentries
|
164
180
|
when startstring
|
165
181
|
list_start = 0
|
182
|
+
when allstring
|
183
|
+
list_start = 0
|
184
|
+
nentries = entries.length
|
185
|
+
paged = false
|
186
|
+
when pagedstring
|
187
|
+
list_start = start
|
188
|
+
nentries = nentries_orig
|
189
|
+
paged = true
|
166
190
|
when *(c1.keys)
|
167
191
|
f = c1[pos]
|
168
192
|
f.call(entries)
|
@@ -189,7 +213,11 @@ def xmms2_ids_to_display_list_strings(ids, fields=%w[artist title url duration])
|
|
189
213
|
ids.map do |id|
|
190
214
|
my_info = $xc.extract_medialib_info(id, *fields)
|
191
215
|
artist_part = my_info[:artist]
|
192
|
-
|
216
|
+
begin
|
217
|
+
some_title = (my_info[:title] or File.basename(my_info[:url]))
|
218
|
+
rescue Exception
|
219
|
+
some_title = "!!NO TITLE!!"
|
220
|
+
end
|
193
221
|
duration = my_info[:duration].to_i.ms_to_time_string
|
194
222
|
"#{artist_part}|||#{some_title} [#{duration}]"
|
195
223
|
end
|
@@ -298,7 +326,9 @@ def match_collection(field, pattern, base_coll=nil)
|
|
298
326
|
coll.operands << Xmms::Collection.universe
|
299
327
|
end
|
300
328
|
coll.attributes["field"] = field
|
301
|
-
|
329
|
+
if !pattern.nil?
|
330
|
+
coll.attributes["value"] = pattern
|
331
|
+
end
|
302
332
|
coll
|
303
333
|
end
|
304
334
|
|
@@ -356,10 +386,9 @@ while true do
|
|
356
386
|
when "list"
|
357
387
|
pos = pl_list(nil, nil, "Play Track:")
|
358
388
|
if not pos.nil?
|
359
|
-
puts "moving to positon #{pos}"
|
360
389
|
play_new_track($xc, pos)
|
390
|
+
break
|
361
391
|
end
|
362
|
-
break
|
363
392
|
when "add"
|
364
393
|
d = Dir.new($MUSIC_DIRECTORY)
|
365
394
|
add_dir = $COMMAND_SIG + 'add-dir'
|
@@ -371,7 +400,7 @@ while true do
|
|
371
400
|
x
|
372
401
|
end
|
373
402
|
end
|
374
|
-
choice = my_dmenu(entries.sort << add_dir, "Add entries"
|
403
|
+
choice = my_dmenu(entries.sort << add_dir, "Add entries")
|
375
404
|
path = File.join(d, choice)
|
376
405
|
if choice.empty?
|
377
406
|
d = nil
|
@@ -426,7 +455,7 @@ while true do
|
|
426
455
|
[k,v]
|
427
456
|
}]
|
428
457
|
while true
|
429
|
-
field = my_dmenu(info.map {|k,v| "#{k} |||#{v[0]}"}, "Info"
|
458
|
+
field = my_dmenu(info.map {|k,v| "#{k} |||#{v[0]}"}, "Info")
|
430
459
|
if field.empty?
|
431
460
|
break
|
432
461
|
else
|
@@ -477,29 +506,50 @@ while true do
|
|
477
506
|
edit_metadata(ids.map{ |id| $xc.extract_medialib_info(id, "url")[:url] })
|
478
507
|
end
|
479
508
|
|
480
|
-
|
509
|
+
def drop_ids(ids)
|
510
|
+
ids.each do |id|
|
511
|
+
$xc.medialib_entry_remove(id).wait
|
512
|
+
end
|
513
|
+
end
|
514
|
+
|
481
515
|
refine = false
|
516
|
+
completed = false
|
482
517
|
cs = {
|
483
|
-
'add' => proc { |k| add(k) },
|
484
|
-
'edit-metadata' => proc { |k| edit_ids_metadata(k) },
|
485
|
-
'new-playlist' => proc { |k| new_playlist_prompt(k) },
|
486
|
-
'refine' => proc { |k| refine=true }
|
518
|
+
'add' => proc { |k| add(k) ; completed = true },
|
519
|
+
'edit-metadata' => proc { |k| edit_ids_metadata(k) ; completed = true},
|
520
|
+
'new-playlist' => proc { |k| new_playlist_prompt(k) ; completed = true},
|
521
|
+
'refine' => proc { |k| refine=true },
|
522
|
+
'drop' => proc { |k| drop_ids(k) ; completed=true },
|
487
523
|
}
|
488
524
|
|
525
|
+
collection_stack = []
|
526
|
+
search_stack = []
|
489
527
|
while true
|
490
|
-
|
528
|
+
search_path = search_stack.map{|x| "#{x[0]}:#{x[1]}"}.join("/")
|
529
|
+
if not search_path.empty?
|
530
|
+
search_path += " "
|
531
|
+
end
|
532
|
+
field = my_dmenu(fields, "#{search_path}Field")
|
491
533
|
if field.empty?
|
492
|
-
|
534
|
+
if collection_stack.empty?
|
535
|
+
break
|
536
|
+
else
|
537
|
+
collection_stack.pop
|
538
|
+
search_stack.pop
|
539
|
+
next
|
540
|
+
end
|
541
|
+
end
|
542
|
+
current_collection = collection_stack[-1]
|
543
|
+
if current_collection.nil?
|
544
|
+
current_collection = Xmms::Collection.universe
|
493
545
|
end
|
494
546
|
field_sym = field.to_sym
|
495
547
|
options = Set.new(get_collection_info(current_collection, field).map{|x| x.fetch(field_sym, "UNDEF")}).to_a.sort
|
496
|
-
|
497
548
|
lists = [options]
|
498
549
|
search_string = ""
|
499
|
-
# XXX: Save and display past searches
|
500
550
|
begin
|
501
551
|
lists.each_with_index do |x, i|
|
502
|
-
search_string = my_dmenu(x,
|
552
|
+
search_string = my_dmenu(x, "Search string (#{i}/#{lists.length})")
|
503
553
|
break
|
504
554
|
end
|
505
555
|
rescue Exception
|
@@ -510,18 +560,17 @@ while true do
|
|
510
560
|
if !options.include?(search_string)
|
511
561
|
search_string.gsub!(" ","*")
|
512
562
|
elsif field == 'url'
|
513
|
-
search_string = Xmms::
|
563
|
+
search_string = Xmms::encode_xmms2_url(search_string)
|
514
564
|
end
|
515
565
|
|
516
566
|
if search_string.empty?
|
517
|
-
|
567
|
+
next
|
518
568
|
end
|
519
|
-
|
520
|
-
puts search_string
|
521
|
-
coll = match_collection(field, search_string, current_collection)
|
569
|
+
coll = match_collection(field, search_string == "UNDEF" ? nil : "*#{search_string}*", current_collection)
|
522
570
|
d = $xc.coll_query_ids(coll,"artist,album,tracknr").wait.value
|
523
571
|
d = d.reverse
|
524
|
-
|
572
|
+
refine = false
|
573
|
+
pos = list_ids(d, "Results", 0, $LIST_ENTRIES_PER_PAGE, cs)
|
525
574
|
|
526
575
|
# Make the playlist collection
|
527
576
|
new_playlist('search-result-list', d)
|
@@ -531,17 +580,21 @@ while true do
|
|
531
580
|
pl = $xc.playlist('search-result-list')
|
532
581
|
pl.load.wait
|
533
582
|
play_new_track($xc, pos)
|
583
|
+
completed = true
|
534
584
|
break
|
535
585
|
end
|
536
586
|
|
537
587
|
if refine
|
538
|
-
|
539
|
-
|
540
|
-
|
588
|
+
collection_stack.push coll
|
589
|
+
search_stack.push [field, search_string]
|
590
|
+
elsif completed
|
591
|
+
break
|
541
592
|
end
|
542
593
|
end
|
543
594
|
|
544
|
-
|
595
|
+
if completed
|
596
|
+
break
|
597
|
+
end
|
545
598
|
when "remove"
|
546
599
|
while true
|
547
600
|
pos = pl_list(nil,nil,"Remove entry:")
|
@@ -596,14 +649,14 @@ while true do
|
|
596
649
|
while tag_menu(album_ids, [])
|
597
650
|
end
|
598
651
|
rescue => e
|
599
|
-
puts e
|
652
|
+
$stderr.puts e
|
600
653
|
end
|
601
654
|
|
602
655
|
break
|
603
656
|
when "change-playlist"
|
604
657
|
begin
|
605
658
|
playlists_prompt do |selected|
|
606
|
-
|
659
|
+
puts $xc.playlist(selected).load.wait.value
|
607
660
|
end
|
608
661
|
end
|
609
662
|
break
|
@@ -642,7 +695,7 @@ while true do
|
|
642
695
|
$xc.quit.wait
|
643
696
|
break
|
644
697
|
when "seek"
|
645
|
-
|
698
|
+
cur = $xc.playback_playtime.wait.value
|
646
699
|
id = $xc.playback_current_id.wait.value
|
647
700
|
info = $xc.extract_medialib_info(id, :duration)
|
648
701
|
dur = info[:duration].to_i
|
@@ -650,15 +703,20 @@ while true do
|
|
650
703
|
times = []
|
651
704
|
times << ["start", 0]
|
652
705
|
Range.new(0,dur).step(interval_size).each do |x|
|
653
|
-
|
706
|
+
sgn = x-cur >= 0?"+":""
|
707
|
+
offset = (x - cur).ms_to_time_string
|
708
|
+
times << [" #{x.ms_to_time_string} #{sgn}#{offset} ", x]
|
654
709
|
end
|
655
710
|
times << ["end", dur]
|
656
711
|
seek_location = my_dmenu(times.map{|x| x[0]}).to_s
|
657
|
-
|
658
|
-
|
659
|
-
|
660
|
-
|
661
|
-
|
712
|
+
if !seek_location.empty?
|
713
|
+
thash = Hash[times]
|
714
|
+
seek = thash[seek_location]
|
715
|
+
if !seek.nil?
|
716
|
+
$xc.playback_seek_ms(seek).wait.value
|
717
|
+
end
|
718
|
+
break
|
719
|
+
end
|
662
720
|
else
|
663
721
|
if not command.empty?
|
664
722
|
`xmms2 #{command}`
|
data/dxmms2.gemspec
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |spec|
|
4
4
|
spec.name = "dxmms2"
|
5
|
-
spec.version = "1.
|
5
|
+
spec.version = "1.2.0"
|
6
6
|
spec.authors = ["Mark Watts"]
|
7
7
|
spec.email = ["wattsmark2015@gmail.com"]
|
8
8
|
spec.summary = %q{A client for working with xmms2}
|
@@ -15,9 +15,9 @@ Gem::Specification.new do |spec|
|
|
15
15
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
16
16
|
spec.require_paths = ["."]
|
17
17
|
|
18
|
-
spec.add_development_dependency "bundler", "~>
|
19
|
-
spec.add_development_dependency "rake", "~>
|
20
|
-
spec.add_runtime_dependency "glib2", "~> 3.
|
18
|
+
spec.add_development_dependency "bundler", "~>2.2", ">= 2.2.10"
|
19
|
+
spec.add_development_dependency "rake", "~>12.3", ">= 12.3.2"
|
20
|
+
spec.add_runtime_dependency "glib2", "~> 3.4.3"
|
21
21
|
spec.add_runtime_dependency "xmms2_utils", "~> 0.1.2"
|
22
|
-
spec.add_runtime_dependency "markw-dmenu", "~> 1.
|
22
|
+
spec.add_runtime_dependency "markw-dmenu", "~> 1.2.0"
|
23
23
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dxmms2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mark Watts
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-02-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -16,42 +16,54 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
19
|
+
version: '2.2'
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 2.2.10
|
20
23
|
type: :development
|
21
24
|
prerelease: false
|
22
25
|
version_requirements: !ruby/object:Gem::Requirement
|
23
26
|
requirements:
|
24
27
|
- - "~>"
|
25
28
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
29
|
+
version: '2.2'
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 2.2.10
|
27
33
|
- !ruby/object:Gem::Dependency
|
28
34
|
name: rake
|
29
35
|
requirement: !ruby/object:Gem::Requirement
|
30
36
|
requirements:
|
31
37
|
- - "~>"
|
32
38
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
39
|
+
version: '12.3'
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 12.3.2
|
34
43
|
type: :development
|
35
44
|
prerelease: false
|
36
45
|
version_requirements: !ruby/object:Gem::Requirement
|
37
46
|
requirements:
|
38
47
|
- - "~>"
|
39
48
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
49
|
+
version: '12.3'
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 12.3.2
|
41
53
|
- !ruby/object:Gem::Dependency
|
42
54
|
name: glib2
|
43
55
|
requirement: !ruby/object:Gem::Requirement
|
44
56
|
requirements:
|
45
57
|
- - "~>"
|
46
58
|
- !ruby/object:Gem::Version
|
47
|
-
version: 3.
|
59
|
+
version: 3.4.3
|
48
60
|
type: :runtime
|
49
61
|
prerelease: false
|
50
62
|
version_requirements: !ruby/object:Gem::Requirement
|
51
63
|
requirements:
|
52
64
|
- - "~>"
|
53
65
|
- !ruby/object:Gem::Version
|
54
|
-
version: 3.
|
66
|
+
version: 3.4.3
|
55
67
|
- !ruby/object:Gem::Dependency
|
56
68
|
name: xmms2_utils
|
57
69
|
requirement: !ruby/object:Gem::Requirement
|
@@ -72,14 +84,14 @@ dependencies:
|
|
72
84
|
requirements:
|
73
85
|
- - "~>"
|
74
86
|
- !ruby/object:Gem::Version
|
75
|
-
version: 1.
|
87
|
+
version: 1.2.0
|
76
88
|
type: :runtime
|
77
89
|
prerelease: false
|
78
90
|
version_requirements: !ruby/object:Gem::Requirement
|
79
91
|
requirements:
|
80
92
|
- - "~>"
|
81
93
|
- !ruby/object:Gem::Version
|
82
|
-
version: 1.
|
94
|
+
version: 1.2.0
|
83
95
|
description: "# dxmms2\n*a dmenu shell for xmms2*\n\nSetting the dmenu width in dxmms2
|
84
96
|
requires the patch provided in this repo. The \npatch hasn't been tested--application
|
85
97
|
may require manual effort.\n\n \n"
|
@@ -100,7 +112,7 @@ homepage: http://github.com/mwatts15/xmms2-stuff
|
|
100
112
|
licenses:
|
101
113
|
- MPL-2.0
|
102
114
|
metadata: {}
|
103
|
-
post_install_message:
|
115
|
+
post_install_message:
|
104
116
|
rdoc_options: []
|
105
117
|
require_paths:
|
106
118
|
- "."
|
@@ -115,9 +127,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
115
127
|
- !ruby/object:Gem::Version
|
116
128
|
version: '0'
|
117
129
|
requirements: []
|
118
|
-
|
119
|
-
|
120
|
-
signing_key:
|
130
|
+
rubygems_version: 3.3.15
|
131
|
+
signing_key:
|
121
132
|
specification_version: 4
|
122
133
|
summary: A client for working with xmms2
|
123
134
|
test_files: []
|