mdisc 0.1.4 → 0.1.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/mdisc/menu.rb +1 -1
- data/lib/mdisc/player.rb +5 -1
- data/lib/mdisc/screen.rb +14 -3
- data/lib/mdisc/ui.rb +12 -14
- data/lib/mdisc/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 517516d1caae450b750f38cc40ba6f3c59589378
|
4
|
+
data.tar.gz: 2f76a77f18bd3db546c4b0af4fe02b44eaf9516f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 017a94632c0254a20c380fa84cb3175d6c6a14c794ce109328d9f336c75d9acc6bbf7ecdcb9db35bdaf96bb5e4ce62d7e09c61adf49ff767b9c4a8cfc0dc1bad
|
7
|
+
data.tar.gz: 88c70d888f818e60a16d64c939cf9b7f77c044c2b3358ddf6c0d6fbcbb1b5a4993a925dffe316992cc215f6708792cbcd25f3c6323b542bac45b60060b4f7764
|
data/lib/mdisc/menu.rb
CHANGED
data/lib/mdisc/player.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
require 'open4'
|
2
2
|
|
3
|
+
# FIXME: There is something wrong...
|
4
|
+
|
3
5
|
class Player
|
4
6
|
WAIT_TIME = 0.5
|
5
7
|
|
@@ -25,7 +27,9 @@ class Player
|
|
25
27
|
ui.build_playinfo(item['song_name'], item['artist'])
|
26
28
|
|
27
29
|
@thread = Thread.new do
|
28
|
-
|
30
|
+
# Add input option: --continue,
|
31
|
+
# play a song continuously in case the network becomes offline occasionally.
|
32
|
+
@mp3id, stdin, stdout, stderr = Open4::popen4('mpg123', '--continue', item['mp3_url'])
|
29
33
|
Process::waitpid2 @mp3id
|
30
34
|
|
31
35
|
if @playing_flag
|
data/lib/mdisc/screen.rb
CHANGED
@@ -8,7 +8,7 @@ class Screen
|
|
8
8
|
Curses.init_screen
|
9
9
|
Curses.start_color
|
10
10
|
Curses.cbreak
|
11
|
-
Curses.stdscr.keypad
|
11
|
+
Curses.stdscr.keypad(true)
|
12
12
|
Curses.init_pair(1, Curses::COLOR_BLUE, Curses::COLOR_BLACK)
|
13
13
|
Curses.init_pair(2, Curses::COLOR_CYAN, Curses::COLOR_BLACK)
|
14
14
|
Curses.init_pair(3, Curses::COLOR_RED, Curses::COLOR_BLACK)
|
@@ -21,8 +21,8 @@ class Screen
|
|
21
21
|
color = Curses.color_pair num
|
22
22
|
@draw.setpos(y, x)
|
23
23
|
@draw.clrtoeol
|
24
|
-
@draw.attrset
|
25
|
-
@draw.addstr(string)
|
24
|
+
@draw.attrset color
|
25
|
+
@draw.addstr(strip_invalid(string))
|
26
26
|
end
|
27
27
|
|
28
28
|
def clear(top, bottom)
|
@@ -47,4 +47,15 @@ class Screen
|
|
47
47
|
def setpos(*args)
|
48
48
|
@draw.setpos *args
|
49
49
|
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
def strip_invalid(str)
|
54
|
+
# Clean emoji.
|
55
|
+
str = str.gsub(/[\u{00A9}\u{00AE}\u{203C}\u{2049}\u{2122}\u{2139}\u{2194}-\u{2199}\u{21A9}-\u{21AA}\u{231A}-\u{231B}\u{23E9}-\u{23EC}\u{23F0}\u{23F3}\u{24C2}\u{25AA}-\u{25AB}\u{25B6}\u{25C0}\u{25FB}-\u{25FE}\u{2600}-\u{2601}\u{260E}\u{2611}\u{2614}-\u{2615}\u{261D}\u{263A}\u{2648}-\u{2653}\u{2660}\u{2663}\u{2665}-\u{2666}\u{2668}\u{267B}\u{267F}\u{2693}\u{26A0}-\u{26A1}\u{26AA}-\u{26AB}\u{26BD}-\u{26BE}\u{26C4}-\u{26C5}\u{26CE}\u{26D4}\u{26EA}\u{26F2}-\u{26F3}\u{26F5}\u{26FA}\u{26FD}\u{2702}\u{2705}\u{2708}-\u{270C}\u{270F}\u{2712}\u{2714}\u{2716}\u{2728}\u{2733}-\u{2734}\u{2744}\u{2747}\u{274C}\u{274E}\u{2753}-\u{2755}\u{2757}\u{2764}\u{2795}-\u{2797}\u{27A1}\u{27B0}\u{27BF}\u{2934}-\u{2935}\u{2B05}-\u{2B07}\u{2B1B}-\u{2B1C}\u{2B50}\u{2B55}\u{3030}\u{303D}\u{3297}\u{3299}\u{1F004}\u{1F0CF}\u{1F170}-\u{1F171}\u{1F17E}-\u{1F17F}\u{1F18E}\u{1F191}-\u{1F19A}\u{1F201}-\u{1F202}\u{1F21A}\u{1F22F}\u{1F232}-\u{1F23A}\u{1F250}-\u{1F251}\u{1F300}-\u{1F31F}\u{1F330}-\u{1F335}\u{1F337}-\u{1F37C}\u{1F380}-\u{1F393}\u{1F3A0}-\u{1F3C4}\u{1F3C6}-\u{1F3CA}\u{1F3E0}-\u{1F3F0}\u{1F400}-\u{1F43E}\u{1F440}\u{1F442}-\u{1F4F7}\u{1F4F9}-\u{1F4FC}\u{1F500}-\u{1F507}\u{1F509}-\u{1F53D}\u{1F550}-\u{1F567}\u{1F5FB}-\u{1F640}\u{1F645}-\u{1F64F}\u{1F680}-\u{1F68A}\u{1F68C}-\u{1F6C5}]/, "").strip
|
56
|
+
|
57
|
+
# Remove unnecessary charactors to prevent bad UI layout.
|
58
|
+
# More info about regex and Unicode: http://www.regular-expressions.info/unicode.html
|
59
|
+
str = str.gsub(/[\p{M}\p{Po}\p{So}]/, "").strip
|
60
|
+
end
|
50
61
|
end
|
data/lib/mdisc/ui.rb
CHANGED
@@ -31,10 +31,8 @@ class Ui
|
|
31
31
|
|
32
32
|
SCREEN_HEIGHT = 40
|
33
33
|
SCREEN_WIDTH = 80
|
34
|
-
SCREEN_TOP = 0
|
35
|
-
SCREEN_LEFT = 0
|
36
34
|
|
37
|
-
PLAYER_X =
|
35
|
+
PLAYER_X = 6
|
38
36
|
PLAYER_TITLE_Y = 4
|
39
37
|
PLAYER_STATUS_Y = 5
|
40
38
|
PLAYER_CONTENT_Y = 7
|
@@ -50,9 +48,9 @@ class Ui
|
|
50
48
|
|
51
49
|
def build_playinfo(song_name, artist, pause = false)
|
52
50
|
if pause
|
53
|
-
screen.line(PLAYER_STATUS_Y, PLAYER_NOTE_X, '
|
51
|
+
screen.line(PLAYER_STATUS_Y, PLAYER_NOTE_X, 'S', 3)
|
54
52
|
else
|
55
|
-
screen.line(PLAYER_STATUS_Y, PLAYER_NOTE_X, '
|
53
|
+
screen.line(PLAYER_STATUS_Y, PLAYER_NOTE_X, 'P', 3)
|
56
54
|
end
|
57
55
|
|
58
56
|
sn = pretty(song_name, 0, 28)
|
@@ -82,47 +80,47 @@ class Ui
|
|
82
80
|
case datatype
|
83
81
|
when 'main'
|
84
82
|
show(entries, index, offset, datalist) do |i, datalist|
|
85
|
-
"#{i}
|
83
|
+
"#{i} #{datalist[i]}"
|
86
84
|
end
|
87
85
|
|
88
|
-
screen.line(PLAYER_INFO_Y, PLAYER_X, 'Crafted with
|
86
|
+
screen.line(PLAYER_INFO_Y, PLAYER_X, 'Crafted with <3 by cosmtrek', 3)
|
89
87
|
|
90
88
|
when 'songs'
|
91
89
|
show(entries, index, offset, datalist) do |i, datalist|
|
92
90
|
sn = pretty(datalist[i]['song_name'], 0, 28)
|
93
91
|
at = pretty(datalist[i]['artist'], 0, 24)
|
94
|
-
"#{i}
|
92
|
+
"#{i} #{sn} - #{at}"
|
95
93
|
end
|
96
94
|
|
97
95
|
when 'artists'
|
98
96
|
show(entries, index, offset, datalist) do |i, datalist|
|
99
97
|
an = pretty(datalist[i]['artists_name'], 0, 28)
|
100
|
-
"#{i}
|
98
|
+
"#{i} #{an}"
|
101
99
|
end
|
102
100
|
|
103
101
|
when 'albums'
|
104
102
|
show(entries, index, offset, datalist) do |i, datalist|
|
105
103
|
al = pretty(datalist[i]['albums_name'], 0, 28)
|
106
104
|
an = pretty(datalist[i]['artists_name'], 0, 24)
|
107
|
-
"#{i}
|
105
|
+
"#{i} #{al} - #{an}"
|
108
106
|
end
|
109
107
|
|
110
108
|
when 'playlists'
|
111
109
|
show(entries, index, offset, datalist) do |i, datalist|
|
112
110
|
pn = pretty(datalist[i]['playlists_name'], 0, 28);
|
113
111
|
cn = pretty(datalist[i]['creator_name'], 0, 24);
|
114
|
-
"#{i}
|
112
|
+
"#{i} #{pn}"
|
115
113
|
end
|
116
114
|
|
117
115
|
when 'djchannels'
|
118
116
|
show(entries, index, offset, datalist) do |i, datalist|
|
119
117
|
sn = pretty(datalist[i][0]['song_name'], 0, 28)
|
120
|
-
"#{i}
|
118
|
+
"#{i} #{sn}"
|
121
119
|
end
|
122
120
|
|
123
121
|
when 'help'
|
124
122
|
entries.each do |i|
|
125
|
-
info = "#{i}
|
123
|
+
info = "#{i} #{datalist[i][0]} #{datalist[i][1]} #{datalist[i][2]}"
|
126
124
|
screen.line(i-offset+PLAYER_CONTENT_Y, PLAYER_X, info)
|
127
125
|
end
|
128
126
|
end
|
@@ -250,7 +248,7 @@ class Ui
|
|
250
248
|
|
251
249
|
def highlight_or_not(i, index, offset, info)
|
252
250
|
if i == index
|
253
|
-
highlight = "
|
251
|
+
highlight = "=> #{info}"
|
254
252
|
screen.line(i-offset+PLAYER_CONTENT_Y, PLAYER_POINTER_X, highlight, 2)
|
255
253
|
else
|
256
254
|
screen.line(i-offset+PLAYER_CONTENT_Y, PLAYER_X, info)
|
data/lib/mdisc/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mdisc
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Rick Yu
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-12-
|
11
|
+
date: 2014-12-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|