class Sc20XX::Controllers::TrackController

Handles the navigation thru the current track list

Public Class Methods

new(view, client) click to toggle source
Calls superclass method Sc20XX::Controllers::Controller::new
# File lib/sc20XX/controllers/track_controller.rb, line 12
def initialize(view, client)
  super(view)

  @client = client

  events.on(:key) do |key|
    case key
    when :enter
      @view.select
      events.trigger(:select, current_track)
    when :up, :k
      @view.up
    when :down, :j
      @view.down
      @tracks.load_more if @view.bottom?
    when :u
      user = fetch_user_with_message('Change to soundcloud user: ')
      unless user.nil?
        @client.current_user = user
        @tracks.collection_to_load = :user
        @tracks.clear_and_replace
      end
    when :f
      @client.current_user = fetch_user_with_message('Change to SoundCloud user\'s favourites: ') if @client.current_user.nil?
      unless @client.current_user.nil?
        @tracks.collection_to_load = :favorites
        @tracks.clear_and_replace
      end
    when :s
      @view.clear
      @client.current_user = fetch_user_with_message('Change to SoundCloud user: ') if @client.current_user.nil?
      unless @client.current_user.nil?
        set = UI::Input.getstr('Change to SoundCloud playlist: ')
        set_request = @client.resolve(@client.current_user.permalink + '/sets/' + set)
        if set_request.nil?
          UI::Input.error("No such set/playlist '#{set}' for #{@client.current_user.username}")
          @client.current_user = nil
        else
          @tracks.playlist = Models::Playlist.new(set_request)
          @tracks.collection_to_load = :playlist
          @tracks.clear_and_replace
        end
      end
    end
  end
end

Public Instance Methods

bind_to(tracks) click to toggle source
# File lib/sc20XX/controllers/track_controller.rb, line 74
def bind_to(tracks)
  @tracks = tracks
  @view.bind_to(tracks)
end
current_track() click to toggle source
# File lib/sc20XX/controllers/track_controller.rb, line 70
def current_track
  @tracks[@view.current]
end
fetch_user_with_message(message_to_display) click to toggle source
# File lib/sc20XX/controllers/track_controller.rb, line 59
def fetch_user_with_message(message_to_display)
  permalink = UI::Input.getstr(message_to_display)
  user_hash = @client.resolve(permalink)
  if user_hash
    Models::User.new(user_hash)
  else
    UI::Input.error("No such user '#{permalink}'. Use u to try again.")
    nil
  end
end
load() click to toggle source
# File lib/sc20XX/controllers/track_controller.rb, line 79
def load
  @tracks.load
end
next_track() click to toggle source
# File lib/sc20XX/controllers/track_controller.rb, line 83
def next_track
  @view.down
  @view.select
  events.trigger(:select, current_track)
end