class Ui
Player
UI
SCREEN_TOP
, SCREEN_LEFT
|—–|————-SCREEN_WIDTH———————–| | PLAYER_X
| | |————————————————| | |PLAYER_TITLE_Y | | |————————————————| | |PLAYER_STATUS_Y | | | | | |————————————————| | |PLAYER_CONTENT_Y | | | | | | | | | |SCREEN_HEIGHT | | | | | | | | | | | | | | | | | | | | | | |————————————————| | |PLAYER_INFO_Y | |—–|————————————————|
Constants
- PLAYER_CONTENT_Y
- PLAYER_INFO_Y
- PLAYER_NOTE_X
- PLAYER_POINTER_X
- PLAYER_STATUS_Y
- PLAYER_TITLE_Y
- PLAYER_X
- SCREEN_HEIGHT
- SCREEN_LEFT
- SCREEN_TOP
- SCREEN_WIDTH
Attributes
Public Class Methods
# File lib/mplug163/ui.rb, line 46 def initialize Curses.init_screen Curses.start_color Curses.cbreak Curses.stdscr.keypad(true) Curses.init_pair(1, Curses::COLOR_BLUE, Curses::COLOR_BLACK) Curses.init_pair(2, Curses::COLOR_CYAN, Curses::COLOR_BLACK) Curses.init_pair(3, Curses::COLOR_RED, Curses::COLOR_BLACK) Curses.init_pair(4, Curses::COLOR_MAGENTA, Curses::COLOR_BLACK) # height, width, top, left @screen = Curses::Window.new(SCREEN_HEIGHT, SCREEN_WIDTH, 0, 0) @netease = NetEase.new end
Public Instance Methods
# File lib/mplug163/ui.rb, line 75 def build_loading clear_to_bottom(@screen, PLAYER_CONTENT_Y, SCREEN_HEIGHT) putstr(@screen, PLAYER_CONTENT_Y, PLAYER_X, 'loading...', Curses.color_pair(1)) @screen.refresh end
# File lib/mplug163/ui.rb, line 246 def build_login params = get_param('请输入登录信息:(e.g. foobar@163.com foobar)') account = params.split(' ') return build_login if account.size != 2 login_info = @netease.login(account[0], account[1]) if login_info['code'] != 200 x = build_login_error return x == '1' ? build_login : -1 else return [login_info, account] end end
# File lib/mplug163/ui.rb, line 260 def build_login_error clear_to_bottom(@screen, PLAYER_CONTENT_Y, SCREEN_HEIGHT) putstr(@screen, PLAYER_CONTENT_Y + 1, PLAYER_X, 'oh,出现错误 Orz', Curses.color_pair(2)) putstr(@screen, PLAYER_CONTENT_Y + 2, PLAYER_X, '1 - 再试一次') putstr(@screen, PLAYER_CONTENT_Y + 3, PLAYER_X, '2 - 稍后再试') putstr(@screen, PLAYER_CONTENT_Y + 5, PLAYER_X, '请键入对应数字:', Curses.color_pair(2)) @screen.refresh @screen.getch end
# File lib/mplug163/ui.rb, line 62 def build_playinfo(song_name, artist, pause = false) if pause putstr(@screen, PLAYER_STATUS_Y, PLAYER_NOTE_X, '■', Curses.color_pair(3)) else putstr(@screen, PLAYER_STATUS_Y, PLAYER_NOTE_X, '▶', Curses.color_pair(3)) end info = "#{song_name} - #{artist}" song_info = pretty_format(info, 0, 50) putstr(@screen, PLAYER_STATUS_Y, PLAYER_X, song_info, Curses.color_pair(4)) @screen.refresh end
# File lib/mplug163/ui.rb, line 177 def build_search(stype) case stype when 'songs' song_name = get_param('搜索歌曲:') data = @netease.search(song_name, stype = 1) song_ids = [] if data['result'].include? 'songs' if data['result']['songs'].include? 'mp3Url' songs = data['result']['songs'] else (0...data['result']['songs'].size).each do |i| song_ids.push data['result']['songs'][i]['id'] end songs = @netease.songs_detail(song_ids) end return @netease.dig_info(songs, 'songs') end when 'artists' artist_name = get_param('搜索艺术家:') data = @netease.search(artist_name, stype = 100) if data['result'].include? 'artists' artists = data['result']['artists'] return @netease.dig_info(artists, 'artists') end when 'albums' artist_name = get_param('搜索专辑:') data = @netease.search(artist_name, stype = 10) if data['result'].include? 'albums' albums = data['result']['albums'] return @netease.dig_info(albums, 'albums') end when 'playlists' artist_name = get_param('搜索精选歌单:') data = @netease.search(artist_name, stype = 1000) if data['result'].include? 'playlists' playlists = data['result']['playlists'] return @netease.dig_info(playlists, 'playlists') end end end
# File lib/mplug163/ui.rb, line 270 def get_param(prompt_str) clear_to_bottom(@screen, PLAYER_CONTENT_Y, SCREEN_HEIGHT) putstr(@screen, PLAYER_CONTENT_Y, PLAYER_X, prompt_str, Curses.color_pair(1)) @screen.setpos(PLAYER_CONTENT_Y + 2, PLAYER_X) params = @screen.getstr if params.strip.nil? return get_param(prompt_str) else return params end end
Private Instance Methods
# File lib/mplug163/ui.rb, line 291 def clear_to_bottom(screen, top, bottom) (top..bottom).each do |i| screen.setpos(i, 0) screen.clrtoeol end end
# File lib/mplug163/ui.rb, line 298 def pretty_format(info, start, length) if info.size >= length "#{info[start, length]}..." else info end end
# File lib/mplug163/ui.rb, line 284 def putstr(screen, y, x, string, color = Curses.color_pair(0)) screen.setpos(y, x) screen.clrtoeol screen.attrset(color) screen.addstr(string) end