gtk2mp3 1.5.0 → 3.1.210926
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +53 -21
- data/bin/gtk2mp3 +11 -36
- data/lib/gtk2mp3/config.rb +36 -31
- data/lib/gtk2mp3/gui.rb +18 -116
- data/lib/gtk2mp3/mpd.rb +55 -0
- data/lib/gtk2mp3/picard_button.rb +41 -0
- data/lib/gtk2mp3.rb +30 -11
- metadata +20 -40
- data/cache/README.txt +0 -1
- data/data/VERSION +0 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f7c165134edc00cdf60e79473c1c85808eeb405719c81daa096b8ace59af8b83
|
4
|
+
data.tar.gz: d909d47246ceaf95959dbde7e30ea4e63de94e54d5f7c0852f5ffa449ffff5c9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f0c7bc19d1a82272bbd644e8a3fc3592b00053477e5fafefd4bffebca2e6904fd178267a3780e35aa2ed776dea909593f4e9ad2daaef60972117586c80cc54b9
|
7
|
+
data.tar.gz: ddb29e99f9c23a0cd710c656744afaf95180e08fa70f542a87c698a56777ec9f9323e3b1bf952a9ef70aebc55e66faaa5e5f4e370a5598b8c6549a6dd768a036
|
data/README.md
CHANGED
@@ -1,31 +1,63 @@
|
|
1
|
-
# Gtk2Mp3
|
1
|
+
# Gtk2Mp3
|
2
2
|
|
3
|
+
* [VERSION 3.1.210926](https://github.com/carlosjhr64/gtk2mp3/releases)
|
3
4
|
* [github](https://www.github.com/carlosjhr64/gtk2mp3)
|
4
5
|
* [rubygems](https://rubygems.org/gems/gtk2mp3)
|
5
|
-
* [MPD/MPC](https://www.musicpd.org/)
|
6
6
|
|
7
7
|
## DESCRIPTION:
|
8
8
|
|
9
|
-
A "Next!" button gui for MPD/MPC.
|
9
|
+
A "Next!" button gui for [MPD/MPC](https://www.musicpd.org/).
|
10
10
|
|
11
11
|
## SYNOPSIS
|
12
|
-
|
13
|
-
|
14
|
-
|
12
|
+
```console
|
13
|
+
$ gtk2mp3
|
14
|
+
```
|
15
15
|
## INSTALL
|
16
|
-
|
17
|
-
|
18
|
-
|
16
|
+
```console
|
17
|
+
$ gem install gtk2mp3
|
18
|
+
```
|
19
19
|
## HELP
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
20
|
+
```console
|
21
|
+
$ gtk2mp3 --help
|
22
|
+
Usage:
|
23
|
+
gtk2mp3 [:options+]
|
24
|
+
Options:
|
25
|
+
-h --help
|
26
|
+
-v --version
|
27
|
+
--minime Real minime
|
28
|
+
--notoggle Minime wont toggle decorated and keep above
|
29
|
+
--notdecorated Dont decorate window
|
30
|
+
--update Updates and sets playlist to the entire collection
|
31
|
+
# Note:
|
32
|
+
# Requires MPD/MPC.
|
33
|
+
# See https://www.musicpd.org/clients/mpc/.
|
34
|
+
```
|
35
|
+
## MORE:
|
36
|
+
|
37
|
+
You can add your own custom buttons.
|
38
|
+
See my [Picard](lib/gtk2mp3/picard_button.rb) button hook.
|
39
|
+
|
40
|
+
## LICENSE:
|
41
|
+
|
42
|
+
(The MIT License)
|
43
|
+
|
44
|
+
Copyright (c) 2021 CarlosJHR64
|
45
|
+
|
46
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
47
|
+
a copy of this software and associated documentation files (the
|
48
|
+
'Software'), to deal in the Software without restriction, including
|
49
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
50
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
51
|
+
permit persons to whom the Software is furnished to do so, subject to
|
52
|
+
the following conditions:
|
53
|
+
|
54
|
+
The above copyright notice and this permission notice shall be
|
55
|
+
included in all copies or substantial portions of the Software.
|
56
|
+
|
57
|
+
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
58
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
59
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
60
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
61
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
62
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
63
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/bin/gtk2mp3
CHANGED
@@ -1,41 +1,16 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
require 'help_parser'
|
3
2
|
require 'gtk2mp3'
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
# Requires MPD/MPC.
|
15
|
-
# See https://www.musicpd.org/clients/mpc/.
|
16
|
-
HELP
|
17
|
-
|
18
|
-
unless OPTIONS.noinit?
|
19
|
-
unless system 'ps -C mpd'
|
20
|
-
unless system 'mpd'
|
21
|
-
$stderr.puts 'Could not start the mpd daemon.'
|
22
|
-
exit 69 # EX_UNAVAILABLE
|
3
|
+
class Gtk2Mp3
|
4
|
+
begin
|
5
|
+
case ARGV
|
6
|
+
in [/^(-v)|(--version)$/]
|
7
|
+
puts VERSION
|
8
|
+
in [/^(-h)|(--help)$/]
|
9
|
+
puts HELP
|
10
|
+
else
|
11
|
+
Gtk2Mp3.init
|
12
|
+
Gtk2Mp3.run
|
23
13
|
end
|
24
14
|
end
|
25
|
-
unless system "mpc --wait update" and
|
26
|
-
system "mpc clear" and
|
27
|
-
system "mpc ls | mpc add" and
|
28
|
-
system "mpc consume off" and
|
29
|
-
system "mpc repeat off" and
|
30
|
-
system "mpc random on" and
|
31
|
-
system "mpc single on"
|
32
|
-
$stderr.puts 'Could not initialize mpd\'s playlist'
|
33
|
-
exit 76 # EX_PROTOCOL
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
Gtk2Mp3.requires
|
38
|
-
Signal.trap :USR1 do
|
39
|
-
Gtk2Mp3.next!(true)
|
40
15
|
end
|
41
|
-
|
16
|
+
exit
|
data/lib/gtk2mp3/config.rb
CHANGED
@@ -1,35 +1,40 @@
|
|
1
|
-
|
2
|
-
using Rafini::String
|
3
|
-
|
1
|
+
class Gtk2Mp3
|
2
|
+
using Rafini::String # for semantic
|
3
|
+
extend Rafini::Empty # for s0,a0,h0
|
4
|
+
|
4
5
|
CONFIG = {
|
5
|
-
|
6
|
-
DBM: "#{XDG['CACHE']}/gtk3app/gtk2mp3/dbm.json",
|
6
|
+
MonkeyPatch: s0,
|
7
7
|
BUTTONS: [:next_button!, :stop_button!],
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
8
|
+
|
9
|
+
NEXT_BUTTON: [label: 'Next!'],
|
10
|
+
next_button: h0,
|
11
|
+
next_button!: [:NEXT_BUTTON, :next_button, 'clicked'],
|
12
|
+
|
13
|
+
STOP_BUTTON: [label: 'Stop'],
|
14
|
+
stop_button: h0,
|
15
|
+
stop_button!: [:STOP_BUTTON, :stop_button, 'clicked'],
|
16
|
+
|
17
|
+
ID_LABEL: a0,
|
18
|
+
id_label: {set_selectable: true},
|
19
|
+
id_label!: [:ID_LABEL, :id_label],
|
20
|
+
|
21
|
+
TOOLBOX: [:horizontal],
|
22
|
+
toolbox: h0,
|
23
|
+
toolbox!: [:TOOLBOX,:toolbox],
|
24
|
+
|
25
|
+
HelpFile: 'https://github.com/carlosjhr64/gtk2mp3',
|
26
|
+
Logo: "#{UserSpace::XDG['data']}/gtk3app/gtk2mp3/logo.png",
|
27
|
+
about_dialog: {
|
28
|
+
set_program_name: 'Gtk2Mp3',
|
29
|
+
set_version: VERSION.semantic(0..1),
|
30
|
+
set_copyright: '(c) 2021 CarlosJHR64',
|
31
|
+
set_comments: 'A MPD/MPC "Next!" Button',
|
32
|
+
set_website: 'https://github.com/carlosjhr64/gtk2mp3',
|
33
|
+
set_website_label: 'See it at GitHub!',
|
34
|
+
},
|
35
|
+
|
36
|
+
app_menu: {
|
37
|
+
add_menu_item: [:minime!, :about!, :quit!]
|
38
|
+
},
|
34
39
|
}
|
35
40
|
end
|
data/lib/gtk2mp3/gui.rb
CHANGED
@@ -1,125 +1,27 @@
|
|
1
|
-
|
2
|
-
def
|
3
|
-
|
1
|
+
class Gtk2Mp3
|
2
|
+
def set_label(text)
|
3
|
+
@label.text = text
|
4
4
|
end
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
@
|
10
|
-
elsif @next
|
11
|
-
@next = false
|
12
|
-
return true
|
6
|
+
def initialize(stage, toolbar, options, &block)
|
7
|
+
@toolbox = Such::Box.new toolbar, :toolbox!
|
8
|
+
CONFIG[:BUTTONS].each do |button|
|
9
|
+
Such::Button.new(@toolbox, button){block.call button}
|
13
10
|
end
|
14
|
-
|
11
|
+
@label = Such::Label.new(stage, :id_label!)
|
12
|
+
build_logo_menu(block)
|
15
13
|
end
|
16
14
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
n = @list.length
|
27
|
-
loop do
|
28
|
-
id = @list[rand(n)]
|
29
|
-
return id if play?(id)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
def next_song
|
34
|
-
@label.text = @playing = ID[`mpc -f '%file%' searchplay filename #{random_song.shellescape}`]
|
35
|
-
end
|
36
|
-
|
37
|
-
def down(id)
|
38
|
-
if count=@db[id]
|
39
|
-
count -= 1
|
40
|
-
if count>0
|
41
|
-
@db[id] = count
|
42
|
-
else
|
43
|
-
@db.delete(id)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
def up(id)
|
49
|
-
@db[id] = @db[id].to_i+1
|
50
|
-
end
|
51
|
-
|
52
|
-
def db_update
|
53
|
-
if @skipped
|
54
|
-
up(@skipped) if Time.now - @time < CONFIG[:PLAYED]/2
|
55
|
-
down(@skipped) if Time.now - @time > CONFIG[:PLAYED]
|
56
|
-
elsif @played
|
57
|
-
down(@played)
|
58
|
-
next_song
|
59
|
-
end
|
60
|
-
@time,@played,@skipped = Time.now,@playing,nil
|
61
|
-
end
|
62
|
-
|
63
|
-
def mpc_idle_player
|
64
|
-
loop do
|
65
|
-
system 'mpc idle player'
|
66
|
-
MUTEX.synchronize{db_update}
|
15
|
+
def build_logo_menu(block)
|
16
|
+
Gtk3App.logo_press_event do |button|
|
17
|
+
case button
|
18
|
+
when 1
|
19
|
+
block.call :next_button!
|
20
|
+
when 2
|
21
|
+
block.call :stop_button!
|
22
|
+
when 3
|
23
|
+
# Gtk3App's main menu
|
67
24
|
end
|
68
25
|
end
|
69
|
-
|
70
|
-
def next_song!
|
71
|
-
MUTEX.synchronize do
|
72
|
-
@skipped = @playing
|
73
|
-
next_song
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
def stop_song!
|
78
|
-
MUTEX.synchronize do
|
79
|
-
@skipped = @playing = @played = nil
|
80
|
-
system 'mpc stop'
|
81
|
-
end
|
82
|
-
end
|
83
|
-
|
84
|
-
def initialize(program)
|
85
|
-
# Build
|
86
|
-
window,minime,menu = program.window,program.mini_menu,program.app_menu
|
87
|
-
vbox = Such::Box.new(window, :VBOX)
|
88
|
-
hbox = Such::Box.new(vbox, :HBOX)
|
89
|
-
Such::Button.new(hbox, :next_button!){next_song!} if CONFIG[:BUTTONS].include?(:next_button!)
|
90
|
-
Such::Button.new(hbox, :stop_button!){stop_song!} if CONFIG[:BUTTONS].include?(:stop_button!)
|
91
|
-
@label = Such::Label.new(vbox)
|
92
|
-
menu.each{|_|_.destroy if _.key==:fs! or _.key==:help!}
|
93
|
-
minime.each{|_|_.destroy}
|
94
|
-
minime.add_menu_item(:stop_item!){stop_song!} if CONFIG[:ITEMS].include?(:stop_item!)
|
95
|
-
minime.add_menu_item(:next_item!){next_song!} if CONFIG[:ITEMS].include?(:next_item!)
|
96
|
-
|
97
|
-
# Inits
|
98
|
-
@db = File.exist?(_=CONFIG[:DBM]) ? JSON.parse(File.read(_)) : {}
|
99
|
-
@list = `mpc listall`.lines.map{|_|ID[_]}.uniq
|
100
|
-
# A fuzzy delete of possibly gone keys...
|
101
|
-
@db.keys.each{|id| down(id) unless @list.include?(id)}
|
102
|
-
|
103
|
-
# Run
|
104
|
-
@skipped=@playing=nil
|
105
|
-
next_song!
|
106
|
-
@time,@played = Time.now,@playing
|
107
|
-
Thread.new do
|
108
|
-
sleep(1) # mpd needs a little time to settle
|
109
|
-
mpc_idle_player
|
110
|
-
end
|
111
|
-
window.show_all
|
112
|
-
|
113
|
-
# Handle Signal.trap
|
114
|
-
GLib::Timeout.add(750) do
|
115
|
-
next_song! if Gtk2Mp3.next!
|
116
|
-
true # repeat
|
117
|
-
end
|
118
|
-
end
|
119
|
-
|
120
|
-
def finalize
|
121
|
-
stop_song!
|
122
|
-
File.write(CONFIG[:DBM], JSON.pretty_generate(@db))
|
123
|
-
end
|
124
26
|
end
|
125
27
|
end
|
data/lib/gtk2mp3/mpd.rb
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
class Gtk2Mp3
|
2
|
+
def Gtk2Mp3.system_mpd
|
3
|
+
# check if mpd is already running
|
4
|
+
unless system 'ps -C mpd'
|
5
|
+
unless system 'mpd'
|
6
|
+
$stderr.puts 'Could not start the mpd daemon.'
|
7
|
+
exit 69 # EX_UNAVAILABLE
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def Gtk2Mp3.system_mpc
|
13
|
+
# initialize playlist
|
14
|
+
unless system 'mpc --wait update' and
|
15
|
+
system 'mpc clear' and
|
16
|
+
system 'mpc ls | mpc add' and
|
17
|
+
system 'mpc consume off' and
|
18
|
+
system 'mpc repeat off' and
|
19
|
+
system 'mpc random on' and
|
20
|
+
system 'mpc single off'
|
21
|
+
$stderr.puts %q(Could not initialize mpd's playlist)
|
22
|
+
exit 76 # EX_PROTOCOL
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def Gtk2Mp3.mpc_command(command)
|
27
|
+
case command
|
28
|
+
when :next_button!
|
29
|
+
if system 'mpc pause-if-playing'
|
30
|
+
sleep 0.25
|
31
|
+
system 'mpc next'
|
32
|
+
else
|
33
|
+
system 'mpc play'
|
34
|
+
end
|
35
|
+
when :stop_button!
|
36
|
+
system 'mpc stop'
|
37
|
+
else
|
38
|
+
Gtk2Mp3.hook(command)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def Gtk2Mp3.hook(command)
|
43
|
+
# You can monkey-patch this function
|
44
|
+
end
|
45
|
+
|
46
|
+
def Gtk2Mp3.mpc_idleloop(gui)
|
47
|
+
Thread.new do
|
48
|
+
IO.popen('mpc idleloop', 'r') do |pipe|
|
49
|
+
while line = pipe.gets
|
50
|
+
gui.set_label File.basename(`mpc current`.strip, '.*')
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# To activate this hook, edit your current configuration file:
|
2
|
+
# ~/.config/gtk3app/gtk2mp3/config-?.?.rbon
|
3
|
+
# Set:
|
4
|
+
# MonkeyPatch: "gtk2mp3/picard_button",
|
5
|
+
require 'shellwords'
|
6
|
+
class Gtk2Mp3
|
7
|
+
extend Rafini::Empty
|
8
|
+
|
9
|
+
CONFIG[:BUTTONS].push :picard_button!
|
10
|
+
CONFIG[:PICARD_BUTTON] = [label: 'Picard']
|
11
|
+
CONFIG[:picard_button] = h0,
|
12
|
+
CONFIG[:picard_button!] = [:PICARD_BUTTON,:picard_button,'clicked']
|
13
|
+
CONFIG[:Music] ||= File.expand_path '~/Music'
|
14
|
+
|
15
|
+
def Gtk2Mp3.hook(command)
|
16
|
+
case command
|
17
|
+
when :picard_button!
|
18
|
+
current = `mpc current`.strip
|
19
|
+
if current=~/^(.*) - (.*)/
|
20
|
+
artist,title = $1,$2
|
21
|
+
else
|
22
|
+
artist,title = nil,current
|
23
|
+
end
|
24
|
+
tfiles = `mpc search Title #{Shellwords.escape(title)} | egrep '\.mp3$'`
|
25
|
+
.strip.split
|
26
|
+
if artist and tfiles.length > 1
|
27
|
+
afiles =
|
28
|
+
`mpc search Artist #{Shellwords.escape(artist)} | egrep '\.mp3$'`
|
29
|
+
.strip.split
|
30
|
+
tfiles.delete_if{ not afiles.include? _1}
|
31
|
+
end
|
32
|
+
if tfiles.length > 0
|
33
|
+
files = tfiles.map{Shellwords.escape File.join(CONFIG[:Music], _1)}
|
34
|
+
.join(' ')
|
35
|
+
spawn "picard #{files}" if tfiles.length > 0
|
36
|
+
else
|
37
|
+
$stderr.puts "Not an mp3 file: #{current}"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
data/lib/gtk2mp3.rb
CHANGED
@@ -1,20 +1,39 @@
|
|
1
|
-
|
2
|
-
VERSION = '1.
|
1
|
+
class Gtk2Mp3
|
2
|
+
VERSION = '3.1.210926'
|
3
|
+
HELP = <<~HELP
|
4
|
+
Usage:
|
5
|
+
gtk2mp3 [:options+]
|
6
|
+
Options:
|
7
|
+
-h --help
|
8
|
+
-v --version
|
9
|
+
--minime \t Real minime
|
10
|
+
--notoggle \t Minime wont toggle decorated and keep above
|
11
|
+
--notdecorated \t Dont decorate window
|
12
|
+
--update \t Updates and sets playlist to the entire collection
|
13
|
+
# Note:
|
14
|
+
# Requires MPD/MPC.
|
15
|
+
# See https://www.musicpd.org/clients/mpc/.
|
16
|
+
HELP
|
3
17
|
|
4
|
-
def
|
18
|
+
def Gtk2Mp3.init
|
19
|
+
require_relative 'gtk2mp3/mpd'
|
20
|
+
Gtk2Mp3.system_mpd
|
21
|
+
Gtk2Mp3.system_mpc if ARGV.include? '--update'
|
22
|
+
end
|
23
|
+
|
24
|
+
def Gtk2Mp3.run
|
5
25
|
# This is a Gtk3App.
|
6
26
|
require 'gtk3app'
|
7
|
-
|
8
|
-
# Standard Libraries
|
9
|
-
require 'json'
|
10
|
-
require 'shellwords'
|
11
|
-
|
12
27
|
# This Gem.
|
13
|
-
require_relative 'gtk2mp3/config
|
14
|
-
require_relative 'gtk2mp3/gui
|
28
|
+
require_relative 'gtk2mp3/config'
|
29
|
+
require_relative 'gtk2mp3/gui'
|
30
|
+
Gtk3App.run(klass:Gtk2Mp3) do |stage, toolbar, options|
|
31
|
+
require CONFIG[:MonkeyPatch] unless CONFIG[:MonkeyPatch].empty?
|
32
|
+
gui = Gtk2Mp3.new(stage, toolbar, options){Gtk2Mp3.mpc_command _1}
|
33
|
+
Gtk2Mp3.mpc_idleloop(gui)
|
34
|
+
end
|
15
35
|
end
|
16
36
|
end
|
17
|
-
|
18
37
|
# Requires:
|
19
38
|
#`ruby`
|
20
39
|
#`mpd`
|
metadata
CHANGED
@@ -1,56 +1,36 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gtk2mp3
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 3.1.210926
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
8
|
-
autorequire:
|
7
|
+
- CarlosJHR64
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-09-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: gtk3app
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: 6.5.0
|
20
17
|
- - "~>"
|
21
18
|
- !ruby/object:Gem::Version
|
22
|
-
version: '
|
23
|
-
type: :runtime
|
24
|
-
prerelease: false
|
25
|
-
version_requirements: !ruby/object:Gem::Requirement
|
26
|
-
requirements:
|
19
|
+
version: '5.3'
|
27
20
|
- - ">="
|
28
21
|
- !ruby/object:Gem::Version
|
29
|
-
version:
|
30
|
-
- - "~>"
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
version: '6.5'
|
33
|
-
- !ruby/object:Gem::Dependency
|
34
|
-
name: gtk3app
|
35
|
-
requirement: !ruby/object:Gem::Requirement
|
36
|
-
requirements:
|
37
|
-
- - ">="
|
38
|
-
- !ruby/object:Gem::Version
|
39
|
-
version: 3.0.0
|
40
|
-
- - "~>"
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
version: '3.0'
|
22
|
+
version: 5.3.210919
|
43
23
|
type: :runtime
|
44
24
|
prerelease: false
|
45
25
|
version_requirements: !ruby/object:Gem::Requirement
|
46
26
|
requirements:
|
47
|
-
- - ">="
|
48
|
-
- !ruby/object:Gem::Version
|
49
|
-
version: 3.0.0
|
50
27
|
- - "~>"
|
51
28
|
- !ruby/object:Gem::Version
|
52
|
-
version: '3
|
53
|
-
|
29
|
+
version: '5.3'
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 5.3.210919
|
33
|
+
description: 'A "Next!" button gui for [MPD/MPC](https://www.musicpd.org/).
|
54
34
|
|
55
35
|
'
|
56
36
|
email: carlosjhr64@gmail.com
|
@@ -62,17 +42,17 @@ files:
|
|
62
42
|
- LICENSE
|
63
43
|
- README.md
|
64
44
|
- bin/gtk2mp3
|
65
|
-
- cache/README.txt
|
66
|
-
- data/VERSION
|
67
45
|
- data/logo.png
|
68
46
|
- lib/gtk2mp3.rb
|
69
47
|
- lib/gtk2mp3/config.rb
|
70
48
|
- lib/gtk2mp3/gui.rb
|
49
|
+
- lib/gtk2mp3/mpd.rb
|
50
|
+
- lib/gtk2mp3/picard_button.rb
|
71
51
|
homepage: https://github.com/carlosjhr64/gtk2mp3
|
72
52
|
licenses:
|
73
53
|
- MIT
|
74
54
|
metadata: {}
|
75
|
-
post_install_message:
|
55
|
+
post_install_message:
|
76
56
|
rdoc_options: []
|
77
57
|
require_paths:
|
78
58
|
- lib
|
@@ -87,10 +67,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
87
67
|
- !ruby/object:Gem::Version
|
88
68
|
version: '0'
|
89
69
|
requirements:
|
90
|
-
- 'ruby: ruby
|
91
|
-
- 'mpd: Music Player Daemon 0.
|
92
|
-
rubygems_version: 3.
|
93
|
-
signing_key:
|
70
|
+
- 'ruby: ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x86_64-linux]'
|
71
|
+
- 'mpd: Music Player Daemon 0.22.11 (0.22.11)'
|
72
|
+
rubygems_version: 3.2.22
|
73
|
+
signing_key:
|
94
74
|
specification_version: 4
|
95
|
-
summary: A "Next!" button gui for MPD/MPC.
|
75
|
+
summary: A "Next!" button gui for [MPD/MPC](https://www.musicpd.org/).
|
96
76
|
test_files: []
|
data/cache/README.txt
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
The dbm.json file will be in this cache directory.
|
data/data/VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
1.5.0
|