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_WIDTH
Attributes
Public Class Methods
# File lib/mdisc/ui.rb, line 44 def initialize self.screen = Screen.new(SCREEN_HEIGHT, SCREEN_WIDTH) self.netease = NetEase.new end
Public Instance Methods
# File lib/mdisc/ui.rb, line 63 def build_loading screen.clear(PLAYER_CONTENT_Y, SCREEN_HEIGHT) screen.line(PLAYER_CONTENT_Y, PLAYER_X, 'loading...', 1) screen.refresh end
# File lib/mdisc/ui.rb, line 203 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/mdisc/ui.rb, line 217 def build_login_error screen.clear(PLAYER_CONTENT_Y, SCREEN_HEIGHT) screen.line(PLAYER_CONTENT_Y + 1, PLAYER_X, 'oh,出现错误 Orz', 2) screen.line(PLAYER_CONTENT_Y + 2, PLAYER_X, '1 - 再试一次') screen.line(PLAYER_CONTENT_Y + 3, PLAYER_X, '2 - 稍后再试') screen.line(PLAYER_CONTENT_Y + 5, PLAYER_X, '请键入对应数字:', 2) screen.refresh screen.getch end
# File lib/mdisc/ui.rb, line 49 def build_playinfo(song_name, artist, pause = false) if pause screen.line(PLAYER_STATUS_Y, PLAYER_NOTE_X, 'S', 3) else screen.line(PLAYER_STATUS_Y, PLAYER_NOTE_X, 'P', 3) end sn = pretty(song_name, 0, 28) at = pretty(artist, 0, 24) info = "#{sn} - #{at}" screen.line(PLAYER_STATUS_Y, PLAYER_X, info, 4) screen.refresh end
# File lib/mdisc/ui.rb, line 131 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 # If no results, then just return empty array. [] end
# File lib/mdisc/ui.rb, line 227 def get_param(prompt_str) screen.clear(PLAYER_CONTENT_Y, SCREEN_HEIGHT) screen.line(PLAYER_CONTENT_Y, PLAYER_X, prompt_str, 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/mdisc/ui.rb, line 249 def highlight_or_not(i, index, offset, info) if i == index highlight = "=> #{info}" screen.line(i-offset+PLAYER_CONTENT_Y, PLAYER_POINTER_X, highlight, 2) else screen.line(i-offset+PLAYER_CONTENT_Y, PLAYER_X, info) end end
# File lib/mdisc/ui.rb, line 241 def pretty(info, start, length) if info.size >= length "#{info[start, length]}..." else info end end
# File lib/mdisc/ui.rb, line 258 def show(entries, index, offset, datalist) entries.each do |i| info = yield(i, datalist) # Get custom info. highlight_or_not(i, index, offset, info) end end