mplug163 0.1.0 → 0.1.1
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/.gitignore +1 -0
- data/README.md +37 -11
- data/lib/mplug163/menu.rb +18 -18
- data/lib/mplug163/ui.rb +28 -27
- data/lib/mplug163/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: 74c850695c2de63dc5ac9391709ead803c5014b4
|
4
|
+
data.tar.gz: c70748299cddc82dada1423a2f1d6a276ea91780
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 192868550cb7aa2e5022ce9b77c00158597fa2988298157dcc79f368d2c24fe9ee6f10770dc253cd738d9384181372bba2fecec81d58dac61127132bd7f7ac01
|
7
|
+
data.tar.gz: dd8d3cc2a8af14adc75783a23b73a7565f18e662b8e93f549d5a92abd22212fe72f9566bab9ec0cf0d387ee2ec8a952095c15eda67242cfa92d90ad03d3d7582
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -1,22 +1,48 @@
|
|
1
1
|
# Mplug163
|
2
2
|
|
3
|
-
|
3
|
+
Mplug163, built with Ruby 2.1, is a command line music player that wirelessly plugs in Netease music(http://music.163.com).
|
4
4
|
|
5
|
-
##
|
5
|
+
## Installation
|
6
6
|
|
7
|
-
|
8
|
-
brew install mpg123
|
9
|
-
```
|
7
|
+
My MacBook Pro is running Mavericks(10.9), Mplug163 runs smoothly with Ruby 2.1.
|
10
8
|
|
11
|
-
|
9
|
+
You're lucky if you use Mac OS X. Just follow:
|
12
10
|
|
13
|
-
```ruby
|
14
|
-
gem install mplug163
|
15
11
|
```
|
12
|
+
$ brew install mpg123
|
13
|
+
$ gem install mplug163
|
14
|
+
```
|
15
|
+
|
16
|
+
After finishing the installation, open your terminal and input `mplug163`. Music's coming!
|
17
|
+
|
18
|
+
Sorry, I do not test Mplug163 in Linux. If you try it in Linux and catch some problem, please issue me. Thanks!
|
19
|
+
|
20
|
+
## Shortcuts
|
21
|
+
|
22
|
+
| Key | Explanation | 中文释义 |
|
23
|
+
| :---|:---------------------|:--------------|
|
24
|
+
| j | Down | 向下 |
|
25
|
+
| k | Up | 向上 |
|
26
|
+
| h | Back | 后退 |
|
27
|
+
| l | Forward | 前进 |
|
28
|
+
| [ | Prev Song | 上一首歌曲 |
|
29
|
+
| ] | Next Song | 上一首歌曲 |
|
30
|
+
| ' ' | Play / Pause | 播放 / 暂停 |
|
31
|
+
| u | Prev Page | 上一页列表 |
|
32
|
+
| d | Next Page | 下一页列表 |
|
33
|
+
| f | Search | 搜索 |
|
34
|
+
| m | Main Menu | 主菜单 |
|
35
|
+
| p | Present Playlist | 当前播放列表 |
|
36
|
+
| a | Add | 添加歌曲到打碟 |
|
37
|
+
| z | DJ List | 打碟列表 |
|
38
|
+
| s | Star Song | 收藏歌曲 |
|
39
|
+
| c | Collection | 收藏歌曲列表 |
|
40
|
+
| r | Remove Present Entry | 删除当前曲目 |
|
41
|
+
| q | Quit | 退出 |
|
16
42
|
|
17
|
-
##
|
43
|
+
## Attention
|
18
44
|
|
19
|
-
|
45
|
+
Mplug163 will make a new directory `~/.mplug163` and touch a file to store user's data for the first time.
|
20
46
|
|
21
47
|
## Big Thanks
|
22
48
|
|
@@ -32,7 +58,7 @@ MIT License.
|
|
32
58
|
|
33
59
|
## Contributing
|
34
60
|
|
35
|
-
1. Fork it ( https://github.com/
|
61
|
+
1. Fork it ( https://github.com/rippleyui/mplug163/fork )
|
36
62
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
37
63
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
38
64
|
4. Push to the branch (`git push origin my-new-feature`)
|
data/lib/mplug163/menu.rb
CHANGED
@@ -2,24 +2,24 @@ require 'curses'
|
|
2
2
|
require 'json'
|
3
3
|
|
4
4
|
SHORTCUT = [
|
5
|
-
['j', 'Down
|
6
|
-
['k', 'Up
|
7
|
-
['h', 'Back
|
8
|
-
['l', 'Forward
|
9
|
-
['
|
10
|
-
['
|
11
|
-
['
|
12
|
-
['
|
13
|
-
['
|
14
|
-
['
|
15
|
-
['m', 'Menu
|
16
|
-
['p', 'Present
|
17
|
-
['a', 'Add
|
18
|
-
['z', 'DJ list
|
19
|
-
['s', 'Star
|
20
|
-
['c', 'Collection', '
|
21
|
-
['r', 'Remove
|
22
|
-
['q', 'Quit
|
5
|
+
['j', 'Down ', '向下'],
|
6
|
+
['k', 'Up ', '向上'],
|
7
|
+
['h', 'Back ', '后退'],
|
8
|
+
['l', 'Forward ', '前进'],
|
9
|
+
['[', 'Prev song ', '上一首歌曲'],
|
10
|
+
[']', 'Next song ', '下一首歌曲'],
|
11
|
+
[' ', 'Play / Pause', '播放 / 暂停'],
|
12
|
+
['u', 'Prev page ', '上一页列表'],
|
13
|
+
['d', 'Next page ', '下一页列表'],
|
14
|
+
['f', 'Search ', '搜索'],
|
15
|
+
['m', 'Menu ', '主菜单'],
|
16
|
+
['p', 'Present ', '当前播放列表'],
|
17
|
+
['a', 'Add ', '添加歌曲到打碟'],
|
18
|
+
['z', 'DJ list ', '打碟列表'],
|
19
|
+
['s', 'Star ', '收藏歌曲'],
|
20
|
+
['c', 'Collection ', '收藏歌曲列表'],
|
21
|
+
['r', 'Remove ', '删除当前曲目'],
|
22
|
+
['q', 'Quit ', '退出']
|
23
23
|
]
|
24
24
|
|
25
25
|
class Menu
|
data/lib/mplug163/ui.rb
CHANGED
@@ -34,13 +34,13 @@ class Ui
|
|
34
34
|
SCREEN_TOP = 0
|
35
35
|
SCREEN_LEFT = 0
|
36
36
|
|
37
|
-
PLAYER_X =
|
37
|
+
PLAYER_X = 8
|
38
38
|
PLAYER_TITLE_Y = 4
|
39
39
|
PLAYER_STATUS_Y = 5
|
40
40
|
PLAYER_CONTENT_Y = 7
|
41
41
|
PLAYER_INFO_Y = 19
|
42
42
|
|
43
|
-
PLAYER_NOTE_X = PLAYER_X -
|
43
|
+
PLAYER_NOTE_X = PLAYER_X - 2
|
44
44
|
PLAYER_POINTER_X = PLAYER_X - 3
|
45
45
|
|
46
46
|
def initialize
|
@@ -61,12 +61,13 @@ class Ui
|
|
61
61
|
|
62
62
|
def build_playinfo(song_name, artist, album_name, pause=false)
|
63
63
|
if pause
|
64
|
-
putstr(@screen, PLAYER_STATUS_Y, PLAYER_NOTE_X, '
|
64
|
+
putstr(@screen, PLAYER_STATUS_Y, PLAYER_NOTE_X, '■', Curses.color_pair(3))
|
65
65
|
else
|
66
|
-
putstr(@screen, PLAYER_STATUS_Y, PLAYER_NOTE_X, '
|
66
|
+
putstr(@screen, PLAYER_STATUS_Y, PLAYER_NOTE_X, '▶', Curses.color_pair(3))
|
67
67
|
end
|
68
68
|
|
69
|
-
|
69
|
+
info = "#{song_name} - #{artist}"
|
70
|
+
song_info = pretty_format(info, 0, 50)
|
70
71
|
putstr(@screen, PLAYER_STATUS_Y, PLAYER_X, song_info, Curses.color_pair(4))
|
71
72
|
@screen.refresh
|
72
73
|
end
|
@@ -82,31 +83,31 @@ class Ui
|
|
82
83
|
putstr(@screen, PLAYER_TITLE_Y, PLAYER_X, title, Curses.color_pair(1))
|
83
84
|
|
84
85
|
if datalist.size == 0
|
85
|
-
putstr(@screen, PLAYER_CONTENT_Y, PLAYER_X, '
|
86
|
+
putstr(@screen, PLAYER_CONTENT_Y, PLAYER_X, '没有内容 Orz')
|
86
87
|
else
|
87
88
|
case datatype
|
88
89
|
when 'main'
|
89
90
|
(offset...[datalist.length, offset+step].min).each do |i|
|
90
91
|
if i == index
|
91
|
-
line_info = "
|
92
|
+
line_info = "♩ #{i}. #{datalist[i]}"
|
92
93
|
putstr(@screen, i-offset+PLAYER_CONTENT_Y, PLAYER_POINTER_X, line_info, Curses.color_pair(2))
|
93
94
|
else
|
94
|
-
line_info = "#{i}
|
95
|
+
line_info = "#{i}. #{datalist[i]}"
|
95
96
|
putstr(@screen, i-offset+PLAYER_CONTENT_Y, PLAYER_X, line_info)
|
96
97
|
end
|
97
98
|
end
|
98
99
|
|
99
|
-
putstr(@screen, PLAYER_INFO_Y, PLAYER_X, '
|
100
|
+
putstr(@screen, PLAYER_INFO_Y, PLAYER_X, 'Crafted with ❤ by Ripple Yui', Curses.color_pair(3))
|
100
101
|
|
101
102
|
when 'songs'
|
102
103
|
(offset...[datalist.length, offset+step].min).each do |i|
|
103
104
|
if i == index
|
104
|
-
info = "
|
105
|
-
line_info = pretty_format(info, 0,
|
105
|
+
info = "♩ #{i}. #{datalist[i]['song_name']} - #{datalist[i]['artist']} - #{datalist[i]['album_name']}"
|
106
|
+
line_info = pretty_format(info, 0, 52)
|
106
107
|
putstr(@screen, i-offset+PLAYER_CONTENT_Y, PLAYER_POINTER_X, line_info, Curses.color_pair(2))
|
107
108
|
else
|
108
|
-
info = "#{i}
|
109
|
-
line_info = pretty_format(info, 0,
|
109
|
+
info = "#{i}. #{datalist[i]['song_name']} - #{datalist[i]['artist']} - #{datalist[i]['album_name']}"
|
110
|
+
line_info = pretty_format(info, 0, 50)
|
110
111
|
putstr(@screen, i-offset+PLAYER_CONTENT_Y, PLAYER_X, line_info)
|
111
112
|
end
|
112
113
|
end
|
@@ -114,10 +115,10 @@ class Ui
|
|
114
115
|
when 'artists'
|
115
116
|
(offset...[datalist.length, offset+step].min).each do |i|
|
116
117
|
if i == index
|
117
|
-
line_info = "
|
118
|
+
line_info = "♩ #{i}. #{datalist[i]['artists_name']} - #{datalist[i]['artist']} #{datalist[i]['alias']}"
|
118
119
|
putstr(@screen, i-offset+PLAYER_CONTENT_Y, PLAYER_POINTER_X, line_info, Curses.color_pair(2))
|
119
120
|
else
|
120
|
-
line_info = "#{i}
|
121
|
+
line_info = "#{i}. #{datalist[i]['artists_name']} - #{datalist[i]['artist']} #{datalist[i]['alias']}"
|
121
122
|
putstr(@screen, i-offset+PLAYER_CONTENT_Y, PLAYER_X, line_info)
|
122
123
|
end
|
123
124
|
end
|
@@ -125,10 +126,10 @@ class Ui
|
|
125
126
|
when 'albums'
|
126
127
|
(offset...[datalist.length, offset+step].min).each do |i|
|
127
128
|
if i == index
|
128
|
-
line_info = "
|
129
|
+
line_info = "♩ #{i}. #{datalist[i]['albums_name']} - #{datalist[i]['artists_name']}"
|
129
130
|
putstr(@screen, i-offset+PLAYER_CONTENT_Y, PLAYER_POINTER_X, line_info, Curses.color_pair(2))
|
130
131
|
else
|
131
|
-
line_info = "#{i}
|
132
|
+
line_info = "#{i}. #{datalist[i]['albums_name']} - #{datalist[i]['artists_name']}"
|
132
133
|
putstr(@screen, i-offset+PLAYER_CONTENT_Y, PLAYER_X, line_info)
|
133
134
|
end
|
134
135
|
end
|
@@ -136,10 +137,10 @@ class Ui
|
|
136
137
|
when 'playlists'
|
137
138
|
(offset...[datalist.length, offset+step].min).each do |i|
|
138
139
|
if i == index
|
139
|
-
line_info = "
|
140
|
+
line_info = "♩ #{i}. #{datalist[i]['playlists_name']} - #{datalist[i]['creator_name']}"
|
140
141
|
putstr(@screen, i-offset+PLAYER_CONTENT_Y, PLAYER_POINTER_X, line_info, Curses.color_pair(2))
|
141
142
|
else
|
142
|
-
line_info = "#{i}
|
143
|
+
line_info = "#{i}. #{datalist[i]['playlists_name']} - #{datalist[i]['creator_name']}"
|
143
144
|
putstr(@screen, i-offset+PLAYER_CONTENT_Y, PLAYER_X, line_info)
|
144
145
|
end
|
145
146
|
end
|
@@ -147,17 +148,17 @@ class Ui
|
|
147
148
|
when 'djchannels'
|
148
149
|
(offset...[datalist.length, offset+step].min).each do |i|
|
149
150
|
if i == index
|
150
|
-
line_info = "
|
151
|
+
line_info = "♩ #{i}. #{datalist[i][0]['song_name']}"
|
151
152
|
putstr(@screen, i-offset+PLAYER_CONTENT_Y, PLAYER_POINTER_X, line_info, Curses.color_pair(2))
|
152
153
|
else
|
153
|
-
line_info = "#{i}
|
154
|
+
line_info = "#{i}. #{datalist[i][0]['song_name']}"
|
154
155
|
putstr(@screen, i-offset+PLAYER_CONTENT_Y, PLAYER_X, line_info)
|
155
156
|
end
|
156
157
|
end
|
157
158
|
|
158
159
|
when 'help'
|
159
160
|
(offset...[datalist.length, offset+step].min).each do |i|
|
160
|
-
line_info = "#{i}
|
161
|
+
line_info = "#{i}. #{datalist[i][0]} #{datalist[i][1]} #{datalist[i][2]}"
|
161
162
|
putstr(@screen, i-offset+PLAYER_CONTENT_Y, PLAYER_X, line_info)
|
162
163
|
end
|
163
164
|
end
|
@@ -227,18 +228,18 @@ class Ui
|
|
227
228
|
|
228
229
|
def build_search_menu
|
229
230
|
clear_to_bottom(@screen, PLAYER_CONTENT_Y, SCREEN_HEIGHT)
|
230
|
-
putstr(@screen, PLAYER_CONTENT_Y, PLAYER_X, '
|
231
|
+
putstr(@screen, PLAYER_CONTENT_Y, PLAYER_X, '选择搜索类型:', Curses.color_pair(1))
|
231
232
|
putstr(@screen, PLAYER_CONTENT_Y + 1, PLAYER_X, '[1] 歌曲')
|
232
233
|
putstr(@screen, PLAYER_CONTENT_Y + 2, PLAYER_X, '[2] 艺术家')
|
233
234
|
putstr(@screen, PLAYER_CONTENT_Y + 3, PLAYER_X, '[3] 专辑')
|
234
235
|
putstr(@screen, PLAYER_CONTENT_Y + 4, PLAYER_X, '[4] 网易精选集')
|
235
|
-
putstr(@screen, PLAYER_CONTENT_Y + 6, PLAYER_X, '
|
236
|
+
putstr(@screen, PLAYER_CONTENT_Y + 6, PLAYER_X, '请键入对应数字:', Curses.color_pair(2))
|
236
237
|
@screen.refresh
|
237
238
|
x = @screen.getch
|
238
239
|
end
|
239
240
|
|
240
241
|
def build_login
|
241
|
-
params = get_param('
|
242
|
+
params = get_param('请输入登录信息:(e.g. foobar@163.com foobar)')
|
242
243
|
account = params.split(' ')
|
243
244
|
return build_login if account.size != 2
|
244
245
|
|
@@ -253,10 +254,10 @@ class Ui
|
|
253
254
|
|
254
255
|
def build_login_error
|
255
256
|
clear_to_bottom(@screen, PLAYER_CONTENT_Y, SCREEN_HEIGHT)
|
256
|
-
putstr(@screen, PLAYER_CONTENT_Y + 1, PLAYER_X, 'oh
|
257
|
+
putstr(@screen, PLAYER_CONTENT_Y + 1, PLAYER_X, 'oh,信息好像不对……', Curses.color_pair(2))
|
257
258
|
putstr(@screen, PLAYER_CONTENT_Y + 2, PLAYER_X, '[1] 再试一次')
|
258
259
|
putstr(@screen, PLAYER_CONTENT_Y + 3, PLAYER_X, '[2] 稍后再试')
|
259
|
-
putstr(@screen, PLAYER_CONTENT_Y + 5, PLAYER_X, '
|
260
|
+
putstr(@screen, PLAYER_CONTENT_Y + 5, PLAYER_X, '请键入对应数字:', Curses.color_pair(2))
|
260
261
|
@screen.refresh
|
261
262
|
x = @screen.getch
|
262
263
|
end
|
data/lib/mplug163/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mplug163
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ripple Yui
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-08-
|
11
|
+
date: 2014-08-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|