ektoplayer 0.1.6 → 0.1.11
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 +4 -4
- data/README.md +26 -12
- data/lib/ektoplayer/application.rb +6 -5
- data/lib/ektoplayer/bindings.rb +61 -55
- data/lib/ektoplayer/common.rb +19 -6
- data/lib/ektoplayer/compat.rb +3 -3
- data/lib/ektoplayer/config.rb +1 -11
- data/lib/ektoplayer/controllers/browser.rb +7 -5
- data/lib/ektoplayer/controllers/help.rb +1 -1
- data/lib/ektoplayer/controllers/info.rb +1 -1
- data/lib/ektoplayer/controllers/playlist.rb +24 -12
- data/lib/ektoplayer/icurses.rb +21 -0
- data/lib/ektoplayer/icurses/curses.rb +53 -0
- data/lib/ektoplayer/icurses/ffi_ncurses.rb +69 -0
- data/lib/ektoplayer/icurses/ncurses.rb +79 -0
- data/lib/ektoplayer/icurses/ncursesw.rb +1 -0
- data/lib/ektoplayer/icurses/sugar.rb +65 -0
- data/lib/ektoplayer/icurses/test.rb +99 -0
- data/lib/ektoplayer/models/player.rb +2 -2
- data/lib/ektoplayer/{mp3player.rb → players/mpg_portaudio_player.rb} +3 -3
- data/lib/ektoplayer/players/mpg_wrapper_player.rb +107 -0
- data/lib/ektoplayer/theme.rb +1 -6
- data/lib/ektoplayer/ui.rb +100 -129
- data/lib/ektoplayer/ui/colors.rb +14 -14
- data/lib/ektoplayer/ui/widgets.rb +4 -4
- data/lib/ektoplayer/ui/widgets/labelwidget.rb +1 -1
- data/lib/ektoplayer/ui/widgets/listwidget.rb +115 -46
- data/lib/ektoplayer/views/help.rb +7 -10
- data/lib/ektoplayer/views/info.rb +29 -38
- data/lib/ektoplayer/views/mainwindow.rb +2 -5
- data/lib/ektoplayer/views/playinginfo.rb +15 -20
- data/lib/ektoplayer/views/progressbar.rb +30 -10
- data/lib/ektoplayer/views/splash.rb +24 -25
- data/lib/ektoplayer/views/tabbar.rb +6 -5
- data/lib/ektoplayer/views/trackrenderer.rb +20 -14
- metadata +15 -47
- data/lib/ektoplayer/views/volumemeter.rb +0 -76
@@ -1,11 +1,11 @@
|
|
1
1
|
%w( ../ui/widgets/container playinginfo progressbar
|
2
|
-
|
2
|
+
splash playlist browser info help tabbar ).
|
3
3
|
each {|_|require_relative(_)}
|
4
4
|
|
5
5
|
module Ektoplayer
|
6
6
|
module Views
|
7
7
|
class MainWindow < UI::VerticalContainer
|
8
|
-
attr_reader :progressbar, :
|
8
|
+
attr_reader :progressbar, :playinginfo, :tabbar
|
9
9
|
attr_reader :windows, :splash, :playlist, :browser, :info, :help
|
10
10
|
|
11
11
|
def initialize(**opts)
|
@@ -13,7 +13,6 @@ module Ektoplayer
|
|
13
13
|
|
14
14
|
@playinginfo = sub(PlayingInfo, size: @size.update(height: 2))
|
15
15
|
@progressbar = sub(ProgressBar, size: @size.update(height: 1))
|
16
|
-
@volumemeter = sub(VolumeMeter, size: @size.update(height: 1))
|
17
16
|
@tabbar = sub(TabBar, size: @size.update(height: 1))
|
18
17
|
@windows = sub(UI::SwitchContainer, size: @size.calc(height: -4))
|
19
18
|
@help = @windows.sub(Help, visible: false)
|
@@ -37,12 +36,10 @@ module Ektoplayer
|
|
37
36
|
height = @size.height
|
38
37
|
|
39
38
|
@playinginfo.size=(@size.update(height: 2))
|
40
|
-
@volumemeter.size=(@size.update(height: 1))
|
41
39
|
@progressbar.size=(@size.update(height: 1))
|
42
40
|
@tabbar.size=(@size.update(height: 1))
|
43
41
|
|
44
42
|
height -= 2 if @playinginfo.visible?
|
45
|
-
height -= 1 if @volumemeter.visible?
|
46
43
|
height -= 1 if @progressbar.visible?
|
47
44
|
height -= 1 if @tabbar.visible?
|
48
45
|
|
@@ -20,7 +20,7 @@ module Ektoplayer
|
|
20
20
|
|
21
21
|
def stopped!
|
22
22
|
return if @state == :stopped
|
23
|
-
with_lock { @state = :stopped; want_redraw }
|
23
|
+
with_lock { @state = :stopped; @position = 0; want_redraw }
|
24
24
|
end
|
25
25
|
|
26
26
|
def track=(t)
|
@@ -42,11 +42,9 @@ module Ektoplayer
|
|
42
42
|
|
43
43
|
def draw_position_and_length
|
44
44
|
return unless visible?
|
45
|
-
@win.
|
46
|
-
@win.
|
47
|
-
|
48
|
-
end
|
49
|
-
@win.refresh
|
45
|
+
@win.attrset(Theme[:'playinginfo.position'])
|
46
|
+
@win.mvaddstr(0, 0, "[#{Common::to_time(@position)}/#{Common::to_time(@length)}]")
|
47
|
+
@win.noutrefresh
|
50
48
|
end
|
51
49
|
|
52
50
|
def attach(playlist, player)
|
@@ -64,7 +62,7 @@ module Ektoplayer
|
|
64
62
|
}
|
65
63
|
|
66
64
|
# TODO: move mouse?
|
67
|
-
self.mouse.on(
|
65
|
+
self.mouse.on(ICurses::BUTTON1_CLICKED) do |mevent|
|
68
66
|
player.toggle
|
69
67
|
end
|
70
68
|
end
|
@@ -94,31 +92,28 @@ module Ektoplayer
|
|
94
92
|
if @track
|
95
93
|
fill(Config[:'playinginfo.format1']).each_with_index do |fmt,i|
|
96
94
|
@win.center(fmt[:sum]) if i == 0
|
97
|
-
@win.
|
98
|
-
|
99
|
-
end
|
95
|
+
@win.attrset(UI::Colors.set(nil, *fmt[:curses_attrs]))
|
96
|
+
@win << fmt[:filled]
|
100
97
|
end
|
101
98
|
|
102
|
-
@win.
|
103
|
-
|
104
|
-
end
|
99
|
+
@win.attrset(Theme[:'playinginfo.state'])
|
100
|
+
@win.from_right(@state.to_s.size + 2) << "[#{@state}]"
|
105
101
|
|
106
102
|
@win.next_line
|
107
103
|
|
108
104
|
fill(Config[:'playinginfo.format2']).each_with_index do |fmt,i|
|
109
105
|
@win.center(fmt[:sum]) if i == 0
|
110
|
-
@win.
|
111
|
-
|
112
|
-
end
|
106
|
+
@win.attrset(UI::Colors.set(nil, *fmt[:curses_attrs]))
|
107
|
+
@win << fmt[:filled]
|
113
108
|
end
|
114
109
|
else
|
110
|
+
@win.attrset(0)
|
115
111
|
@win.center_string(STOPPED_HEADING)
|
116
|
-
@win.
|
117
|
-
|
118
|
-
end
|
112
|
+
@win.attrset(Theme[:'playinginfo.state'])
|
113
|
+
@win.from_right(9) << '[stopped]'
|
119
114
|
end
|
120
115
|
|
121
|
-
#@win.next_line.addstr('
|
116
|
+
#@win.next_line.addstr('~' * @size.width)
|
122
117
|
end
|
123
118
|
end
|
124
119
|
end
|
@@ -5,13 +5,36 @@ require_relative '../theme'
|
|
5
5
|
module Ektoplayer
|
6
6
|
module Views
|
7
7
|
class ProgressBar < UI::Window
|
8
|
+
def layout
|
9
|
+
super
|
10
|
+
load_colors
|
11
|
+
end
|
12
|
+
|
13
|
+
def load_colors(force=false)
|
14
|
+
return if @fade and not force
|
15
|
+
|
16
|
+
if Theme.current == 256
|
17
|
+
fader = UI::ColorFader.new([25,26,27,32,39,38,44,44,45,51,87,159,195])
|
18
|
+
elsif Theme.current == 8
|
19
|
+
fader = UI::ColorFader.new([:blue])
|
20
|
+
else
|
21
|
+
fader = UI::ColorFader.new([-1])
|
22
|
+
end
|
23
|
+
|
24
|
+
@fade = fader.fade(@size.width)
|
25
|
+
@progress_width = @size.width
|
26
|
+
@progress_char = Config[:'progressbar.progress_char']
|
27
|
+
@rest_char = Config[:'progressbar.rest_char']
|
28
|
+
end
|
29
|
+
|
30
|
+
|
8
31
|
def attach(player)
|
9
32
|
player.events.on(:position_change) do
|
10
33
|
self.percent_playing = player.position_percent
|
11
34
|
end
|
12
35
|
|
13
36
|
view=self # TODO
|
14
|
-
[
|
37
|
+
[ICurses::BUTTON1_CLICKED, ICurses::BUTTON2_CLICKED, ICurses::BUTTON3_CLICKED].
|
15
38
|
each do |button|
|
16
39
|
view.mouse.on(button) do |mevent|
|
17
40
|
pos = Float(mevent.x) / (self.size.width - 1) * player.length rescue player.position
|
@@ -31,15 +54,12 @@ module Ektoplayer
|
|
31
54
|
end
|
32
55
|
|
33
56
|
def draw
|
34
|
-
|
35
|
-
@
|
36
|
-
|
37
|
-
@
|
38
|
-
|
39
|
-
|
40
|
-
repeat = (@progress_width - @progress_char.size)
|
41
|
-
@win << @progress_char[0] * repeat if repeat > 0
|
42
|
-
@win << @progress_char[1..-1] if @progress_width > 0
|
57
|
+
load_colors
|
58
|
+
@win.move(0,0)
|
59
|
+
|
60
|
+
@progress_width.times do |i|
|
61
|
+
@win.attron(@fade[i])
|
62
|
+
@win << @progress_char
|
43
63
|
end
|
44
64
|
|
45
65
|
@win.attron(Theme[:'progressbar.rest'])
|
@@ -18,35 +18,35 @@ module Ektoplayer
|
|
18
18
|
\ \__ | | |\ | |__ | | | :___ | |_| | , /____ | | | |
|
19
19
|
\____) |_| |_| \___/ |_| \____/ \_____| |______| |_| |_|..
|
20
20
|
split(?\n)[1..-1].freeze
|
21
|
-
EKTOPLAZM_SIGNATURE = %q
|
21
|
+
EKTOPLAZM_SIGNATURE = %q{
|
22
22
|
___ _ _ _ _ _ _
|
23
23
|
/ __| ___ _ _ _ _ __| | | | (_) |__ ___ _ _ __ _| |_(_)___ _ _
|
24
24
|
\__ \/ _ \ || | ' \/ _` | | |__| | '_ \/ -_) '_/ _` | _| / _ \ ' \
|
25
|
-
|___/\___/\_,_|_||_\__,_| |____|_|_.__/\___|_| \__,_|\__|_\___/_||_
|
25
|
+
|___/\___/\_,_|_||_\__,_| |____|_|_.__/\___|_| \__,_|\__|_\___/_||_|}.
|
26
26
|
split(?\n)[1..-1].freeze
|
27
27
|
|
28
28
|
BUBBLES = [
|
29
|
-
UI::Point.new(x: 6, y: 3).
|
30
|
-
UI::Point.new(x: 28, y: 1).
|
31
|
-
UI::Point.new(x: 46, y: 7).
|
29
|
+
UI::Point.new(x: 6, y: 3).freeze, UI::Point.new(x: 6, y: 7).freeze,
|
30
|
+
UI::Point.new(x: 28, y: 1).freeze, UI::Point.new(x: 28, y: 9).freeze,
|
31
|
+
UI::Point.new(x: 46, y: 7).freeze, UI::Point.new(x: 71, y: 9).freeze
|
32
32
|
].freeze
|
33
33
|
|
34
34
|
def load_colors
|
35
|
-
|
35
|
+
signature_fade = ekto_logo_fade = bubble_fade = [-1].freeze
|
36
36
|
|
37
37
|
if Theme.current == 256
|
38
|
-
|
39
|
-
|
40
|
-
|
38
|
+
bubble_fade = [168,167,161,161,161].freeze
|
39
|
+
signature_fade = [99, 105, 111, 117].freeze
|
40
|
+
ekto_logo_fade = [23, 23, 29, 36, 42, 48, 42, 36, 29, 23].freeze
|
41
41
|
elsif Theme.current == 8
|
42
|
-
|
43
|
-
|
44
|
-
|
42
|
+
bubble_fade = [:red].freeze
|
43
|
+
ekto_logo_fade = [:blue].freeze
|
44
|
+
signature_fade = [:magenta].freeze
|
45
45
|
end
|
46
46
|
|
47
|
-
@bubble_fade = UI::ColorFader.new(
|
48
|
-
@signature_fade = UI::ColorFader.new(
|
49
|
-
@ekto_logo_fade = UI::ColorFader.new(
|
47
|
+
@bubble_fade = UI::ColorFader.new(bubble_fade)
|
48
|
+
@signature_fade = UI::ColorFader.new(signature_fade)
|
49
|
+
@ekto_logo_fade = UI::ColorFader.new(ekto_logo_fade)
|
50
50
|
end
|
51
51
|
|
52
52
|
def draw
|
@@ -68,18 +68,16 @@ module Ektoplayer
|
|
68
68
|
end
|
69
69
|
|
70
70
|
@ekto_logo_fade.fade(EKTOPLAZM_LOGO.size).each_with_index do |c,i|
|
71
|
-
@win.
|
72
|
-
|
73
|
-
@win << EKTOPLAZM_LOGO[i]
|
74
|
-
end
|
71
|
+
@win.attrset(c)
|
72
|
+
@win.mvaddstr(top_pad + i, left_pad, EKTOPLAZM_LOGO[i])
|
75
73
|
end
|
76
74
|
|
77
75
|
f = @bubble_fade.fade(EKTOPLAZM_LOGO.size)
|
78
76
|
BUBBLES.each do |p|
|
79
|
-
@win.
|
80
|
-
@win.
|
81
|
-
@win.
|
82
|
-
@win.
|
77
|
+
@win.attrset(f[p.y - 1])
|
78
|
+
@win.mvaddstr(top_pad + p.y - 1, left_pad + p.x + 1, ?_)
|
79
|
+
@win.attrset(f[p.y])
|
80
|
+
@win.mvaddstr(top_pad + p.y, left_pad + p.x, '(_)')
|
83
81
|
end
|
84
82
|
|
85
83
|
return unless draw_signature
|
@@ -88,9 +86,10 @@ module Ektoplayer
|
|
88
86
|
left_pad = w_center - (EKTOPLAZM_SIGNATURE.max.size / 2)
|
89
87
|
|
90
88
|
EKTOPLAZM_SIGNATURE.each_with_index do |line, i|
|
91
|
-
@win.
|
89
|
+
@win.move(top_pad + i, left_pad)
|
92
90
|
@signature_fade.fade2(line.size).each_with_index do |color,y|
|
93
|
-
@win.
|
91
|
+
@win.attrset(color)
|
92
|
+
@win.addstr(line[y])
|
94
93
|
end
|
95
94
|
end
|
96
95
|
end
|
@@ -31,19 +31,20 @@ module Ektoplayer
|
|
31
31
|
self.pad_size=(@size.update(height: 1))
|
32
32
|
mouse_section.clear
|
33
33
|
@win.erase
|
34
|
-
@win.
|
34
|
+
@win.move(0,0)
|
35
35
|
|
36
36
|
@tabs.each_with_index do |title, i|
|
37
37
|
mevent = with_mouse_section_event do
|
38
38
|
if i == @selected
|
39
|
-
@win.
|
39
|
+
@win.attrset(Theme[:'tabbar.selected'])
|
40
40
|
else
|
41
|
-
@win.
|
41
|
+
@win.attrset(Theme[:'tabbar.unselected'])
|
42
42
|
end
|
43
43
|
|
44
|
-
@win.
|
44
|
+
@win << title.to_s
|
45
|
+
@win.addch(32) # ' '
|
45
46
|
end
|
46
|
-
mevent.on(
|
47
|
+
mevent.on(ICurses::BUTTON1_CLICKED) do
|
47
48
|
trigger(@events, :tab_clicked, i)
|
48
49
|
end
|
49
50
|
end
|
@@ -90,31 +90,38 @@ module Ektoplayer
|
|
90
90
|
end
|
91
91
|
end
|
92
92
|
|
93
|
-
def render(scr, item, index, selected: false, marked: false)
|
93
|
+
def render(scr, item, index, selected: false, marked: false, selection: false)
|
94
94
|
fail ArgumentError, 'item is nil' unless item
|
95
95
|
return unless @column_format
|
96
96
|
|
97
97
|
additional_attributes = 0
|
98
|
-
additional_attributes |=
|
99
|
-
additional_attributes |=
|
98
|
+
additional_attributes |= ICurses::A_BOLD if marked
|
99
|
+
additional_attributes |= ICurses::A_STANDOUT if selected
|
100
100
|
|
101
101
|
if item.is_a? String or item.is_a? Symbol
|
102
|
-
if
|
102
|
+
if selection
|
103
|
+
color = Theme[:'list.item_selection']
|
104
|
+
elsif index % 2 == 0
|
103
105
|
color = Theme[:'list.item_even']
|
104
106
|
else
|
105
107
|
color = Theme[:'list.item_odd']
|
106
108
|
end
|
107
109
|
|
108
|
-
scr.
|
109
|
-
|
110
|
-
end
|
110
|
+
scr.attrset(color | additional_attributes)
|
111
|
+
scr.addstr("[#{item}]".ljust(@width))
|
111
112
|
return
|
112
113
|
end
|
113
114
|
|
114
115
|
@column_format.each_with_index do |c,i|
|
115
|
-
scr.
|
116
|
-
|
116
|
+
scr.addch(32) if i > 0
|
117
|
+
|
118
|
+
if selection
|
119
|
+
scr.attrset(Theme[:'list.item_selection'] | additional_attributes)
|
120
|
+
else
|
121
|
+
scr.attrset(c[:curses_codes] | additional_attributes)
|
122
|
+
end
|
117
123
|
|
124
|
+
if value = item[c[:tag]]
|
118
125
|
if value.is_a?(Integer)
|
119
126
|
value = "%.2d" % value
|
120
127
|
else
|
@@ -122,13 +129,12 @@ module Ektoplayer
|
|
122
129
|
end
|
123
130
|
|
124
131
|
if c[:justify] == :right
|
125
|
-
value
|
132
|
+
scr.addstr(value.rjust(c[:render_size]))
|
126
133
|
else
|
127
|
-
value
|
134
|
+
scr.addstr(value.ljust(c[:render_size]))
|
128
135
|
end
|
129
|
-
|
130
|
-
scr.addstr(
|
131
|
-
scr.addstr(' ') if i < (@column_format.size - 1)
|
136
|
+
else
|
137
|
+
scr.addstr(' ' * c[:render_size])
|
132
138
|
end
|
133
139
|
end
|
134
140
|
end
|
metadata
CHANGED
@@ -1,29 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ektoplayer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Benjamin Abendroth
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-03-
|
11
|
+
date: 2017-03-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
-
- !ruby/object:Gem::Dependency
|
14
|
-
name: audite
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0.4'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0.4'
|
27
13
|
- !ruby/object:Gem::Dependency
|
28
14
|
name: sqlite3
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
@@ -38,20 +24,6 @@ dependencies:
|
|
38
24
|
- - "~>"
|
39
25
|
- !ruby/object:Gem::Version
|
40
26
|
version: '1.3'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: curses
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '1.0'
|
48
|
-
type: :runtime
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - "~>"
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '1.0'
|
55
27
|
- !ruby/object:Gem::Dependency
|
56
28
|
name: nokogiri
|
57
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,20 +38,6 @@ dependencies:
|
|
66
38
|
- - "~>"
|
67
39
|
- !ruby/object:Gem::Version
|
68
40
|
version: '1.7'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: rubyzip
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - "~>"
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '1.2'
|
76
|
-
type: :runtime
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - "~>"
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '1.2'
|
83
41
|
description: Ektoplayer is a commandline client for http://ektoplazm.com, a website
|
84
42
|
providing free electronic music such as techno, goa and psy-trance
|
85
43
|
email: braph93@gmx.de
|
@@ -107,6 +65,13 @@ files:
|
|
107
65
|
- lib/ektoplayer/controllers/playlist.rb
|
108
66
|
- lib/ektoplayer/database.rb
|
109
67
|
- lib/ektoplayer/events.rb
|
68
|
+
- lib/ektoplayer/icurses.rb
|
69
|
+
- lib/ektoplayer/icurses/curses.rb
|
70
|
+
- lib/ektoplayer/icurses/ffi_ncurses.rb
|
71
|
+
- lib/ektoplayer/icurses/ncurses.rb
|
72
|
+
- lib/ektoplayer/icurses/ncursesw.rb
|
73
|
+
- lib/ektoplayer/icurses/sugar.rb
|
74
|
+
- lib/ektoplayer/icurses/test.rb
|
110
75
|
- lib/ektoplayer/models/browser.rb
|
111
76
|
- lib/ektoplayer/models/database.rb
|
112
77
|
- lib/ektoplayer/models/model.rb
|
@@ -114,11 +79,12 @@ files:
|
|
114
79
|
- lib/ektoplayer/models/playlist.rb
|
115
80
|
- lib/ektoplayer/models/search.rb
|
116
81
|
- lib/ektoplayer/models/trackloader.rb
|
117
|
-
- lib/ektoplayer/mp3player.rb
|
118
82
|
- lib/ektoplayer/operations/browser.rb
|
119
83
|
- lib/ektoplayer/operations/operations.rb
|
120
84
|
- lib/ektoplayer/operations/player.rb
|
121
85
|
- lib/ektoplayer/operations/playlist.rb
|
86
|
+
- lib/ektoplayer/players/mpg_portaudio_player.rb
|
87
|
+
- lib/ektoplayer/players/mpg_wrapper_player.rb
|
122
88
|
- lib/ektoplayer/theme.rb
|
123
89
|
- lib/ektoplayer/trackloader.rb
|
124
90
|
- lib/ektoplayer/ui.rb
|
@@ -138,7 +104,6 @@ files:
|
|
138
104
|
- lib/ektoplayer/views/splash.rb
|
139
105
|
- lib/ektoplayer/views/tabbar.rb
|
140
106
|
- lib/ektoplayer/views/trackrenderer.rb
|
141
|
-
- lib/ektoplayer/views/volumemeter.rb
|
142
107
|
homepage: http://github.com/braph/ektoplayer
|
143
108
|
licenses:
|
144
109
|
- GPL-3.0
|
@@ -157,7 +122,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
157
122
|
- - ">="
|
158
123
|
- !ruby/object:Gem::Version
|
159
124
|
version: '0'
|
160
|
-
requirements:
|
125
|
+
requirements:
|
126
|
+
- 'For playback: /bin/mpg123 or the "audite-lib" RubyGem'
|
127
|
+
- 'For archive extracting: /bin/unzip, /bin/7z or "rubyzip" RubyGem'
|
128
|
+
- 'One of the following curses-gems: ffi-ncurses, curses'
|
161
129
|
rubyforge_project:
|
162
130
|
rubygems_version: 2.6.8
|
163
131
|
signing_key:
|