Class: Ui

Inherits:
Object
  • Object
show all
Defined in:
lib/mdisc/ui.rb

Overview

Player UI

SCREEN_TOP, SCREEN_LEFT |—–|————-SCREEN_WIDTH———————–| | PLAYER_X | | |————————————————| | |PLAYER_TITLE_Y | | |————————————————| | |PLAYER_STATUS_Y | | | | | |————————————————| | |PLAYER_CONTENT_Y | | | | | | | | | |SCREEN_HEIGHT | | | | | | | | | | | | | | | | | | | | | | |————————————————| | |PLAYER_INFO_Y | |—–|————————————————|

Constant Summary collapse

SCREEN_HEIGHT =
40
SCREEN_WIDTH =
80
PLAYER_X =
6
PLAYER_TITLE_Y =
4
PLAYER_STATUS_Y =
5
PLAYER_CONTENT_Y =
7
PLAYER_INFO_Y =
17
PLAYER_NOTE_X =
PLAYER_X - 2
PLAYER_POINTER_X =
PLAYER_X - 3

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeUi



44
45
46
47
# File 'lib/mdisc/ui.rb', line 44

def initialize
  self.screen = Screen.new(SCREEN_HEIGHT, SCREEN_WIDTH)
  self.netease = NetEase.new
end

Instance Attribute Details

#neteaseObject

Returns the value of attribute netease.



30
31
32
# File 'lib/mdisc/ui.rb', line 30

def netease
  @netease
end

#screenObject

Returns the value of attribute screen.



30
31
32
# File 'lib/mdisc/ui.rb', line 30

def screen
  @screen
end

Instance Method Details

#build_favorite_menuObject



179
180
181
182
183
184
185
186
187
188
189
# File 'lib/mdisc/ui.rb', line 179

def build_favorite_menu
  screen.clear(PLAYER_CONTENT_Y, SCREEN_HEIGHT)
  screen.line(PLAYER_CONTENT_Y, PLAYER_X, '选择收藏条目类型:', 1)
  screen.line(PLAYER_CONTENT_Y + 1, PLAYER_X, '1 - 歌曲')
  screen.line(PLAYER_CONTENT_Y + 2, PLAYER_X, '2 - 精选歌单')
  screen.line(PLAYER_CONTENT_Y + 3, PLAYER_X, '3 - 专辑')
  screen.line(PLAYER_CONTENT_Y + 4, PLAYER_X, '4 - DJ 节目')
  screen.line(PLAYER_CONTENT_Y + 6, PLAYER_X, '请键入对应数字:', 2)
  screen.refresh
  screen.getch
end

#build_loadingObject



63
64
65
66
67
# 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

#build_loginObject



203
204
205
206
207
208
209
210
211
212
213
214
215
# File 'lib/mdisc/ui.rb', line 203

def 
  params = get_param('请输入登录信息:(e.g. [email protected] foobar)')
   = params.split(' ')
  return  if .size != 2

   = netease.([0], [1])
  if ['code'] != 200
    x = 
    return x == '1' ?  : -1
  else
    return [, ]
  end
end

#build_login_errorObject



217
218
219
220
221
222
223
224
225
# File 'lib/mdisc/ui.rb', line 217

def 
  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

#build_menu(datatype, title, datalist, offset, index, step) ⇒ Object



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
# File 'lib/mdisc/ui.rb', line 69

def build_menu(datatype, title, datalist, offset, index, step)
  title = pretty(title, 0, 50)

  screen.clear(PLAYER_CONTENT_Y, SCREEN_HEIGHT)
  screen.line(PLAYER_TITLE_Y, PLAYER_X, title, 1)

  if datalist.size == 0
    screen.line(PLAYER_CONTENT_Y, PLAYER_X, '没有内容 Orz')
  else
    entries = offset...[datalist.length, offset + step].min

    case datatype
    when 'main'
      show(entries, index, offset, datalist) do |i, datalist|
        "#{i} #{datalist[i]}"
      end

      screen.line(PLAYER_INFO_Y, PLAYER_X, 'Crafted with <3 by cosmtrek', 3)

    when 'songs'
      show(entries, index, offset, datalist) do |i, datalist|
        sn = pretty(datalist[i]['song_name'], 0, 28)
        at = pretty(datalist[i]['artist'], 0, 24)
        "#{i} #{sn} - #{at}"
      end

    when 'artists'
      show(entries, index, offset, datalist) do |i, datalist|
        an = pretty(datalist[i]['artists_name'], 0, 28)
        "#{i} #{an}"
      end

    when 'albums'
      show(entries, index, offset, datalist) do |i, datalist|
        al = pretty(datalist[i]['albums_name'], 0, 28)
        an = pretty(datalist[i]['artists_name'], 0, 24)
        "#{i} #{al} - #{an}"
      end

    when 'playlists'
      show(entries, index, offset, datalist) do |i, datalist|
        pn = pretty(datalist[i]['playlists_name'], 0, 28);
        cn = pretty(datalist[i]['creator_name'], 0, 24);
        "#{i} #{pn}"
      end

    when 'djchannels'
      show(entries, index, offset, datalist) do |i, datalist|
        sn = pretty(datalist[i][0]['song_name'], 0, 28)
        "#{i} #{sn}"
      end

    when 'help'
      entries.each do |i|
        info = "#{i} #{datalist[i][0]} #{datalist[i][1]} #{datalist[i][2]}"
        screen.line(i-offset+PLAYER_CONTENT_Y, PLAYER_X, info)
      end
    end
  end

end

#build_playinfo(song_name, artist, pause = false) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
60
61
# 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

#build_search(stype) ⇒ Object



131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
# 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

#build_search_menuObject



191
192
193
194
195
196
197
198
199
200
201
# File 'lib/mdisc/ui.rb', line 191

def build_search_menu
  screen.clear(PLAYER_CONTENT_Y, SCREEN_HEIGHT)
  screen.line(PLAYER_CONTENT_Y, PLAYER_X, '选择搜索类型:', 1)
  screen.line(PLAYER_CONTENT_Y + 1, PLAYER_X, '1 - 歌曲')
  screen.line(PLAYER_CONTENT_Y + 2, PLAYER_X, '2 - 艺术家')
  screen.line(PLAYER_CONTENT_Y + 3, PLAYER_X, '3 - 专辑')
  screen.line(PLAYER_CONTENT_Y + 4, PLAYER_X, '4 - 精选歌单')
  screen.line(PLAYER_CONTENT_Y + 6, PLAYER_X, '请键入对应数字:', 2)
  screen.refresh
  screen.getch
end

#get_param(prompt_str) ⇒ Object



227
228
229
230
231
232
233
234
235
236
237
# 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