Class: RSpotify::Player

Inherits:
Base
  • Object
show all
Defined in:
lib/rspotify/player.rb

Instance Attribute Summary

Attributes inherited from Base

#external_urls, #href, #id, #type, #uri

Instance Method Summary collapse

Methods inherited from Base

#complete!, #embed, find, #method_missing, #respond_to?, search

Constructor Details

#initialize(user, options = {}) ⇒ Player

Returns a new instance of Player.


4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# File 'lib/rspotify/player.rb', line 4

def initialize(user, options = {})
  @user = user

  @repeat_state           = options['repeat_state']
  @shuffle_state          = options['shuffle_state']
  @progress               = options['progress_ms']
  @is_playing             = options['is_playing']
  @currently_playing_type = options['currently_playing_type']
  @context_type           = options.dig('context', 'type')
  @context_uri            = options.dig('context', 'uri')

  @track = if options['track']
    Track.new options['track']
  end

  @device = if options['device']
    Device.new options['device']
  end
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method in the class RSpotify::Base

Instance Method Details

#currently_playingObject


171
172
173
174
175
176
# File 'lib/rspotify/player.rb', line 171

def currently_playing
  url = "me/player/currently-playing"
  response = RSpotify.resolve_auth_request(@user.id, url)
  return response if RSpotify.raw_response
  Track.new response["item"]
end

#nextObject

Skip User’s Playback To Next Track

Examples:

player = user.player
player.next

146
147
148
149
# File 'lib/rspotify/player.rb', line 146

def next
  url = 'me/player/next'
  User.oauth_post(@user.id, url, {})
end

#pauseObject

Pause the user's currently active player

Examples:

player = user.player
player.pause

116
117
118
119
# File 'lib/rspotify/player.rb', line 116

def pause
  url = 'me/player/pause'
  User.oauth_put(@user.id, url, {})
end

#play(device_id = nil, params = {}) ⇒ Object

Play the user's currently active player or specific device If `device_id` is not passed, the currently active spotify app will be triggered

Examples:

player = user.player
player.play

69
70
71
72
73
74
# File 'lib/rspotify/player.rb', line 69

def play(device_id = nil, params = {})
  url = "me/player/play"
  url = device_id.nil? ? url : "#{url}?device_id=#{device_id}"

  User.oauth_put(@user.id, url, params.to_json)
end

#play_context(device_id = nil, uri) ⇒ Object

Allow user to play a specific context(albums, artists & playlists). If `device_id` is not passed, the currently active spotify app will be triggered

Examples:

player = user.player
player.play_context(nil,"spotify:album:1Je1IMUlBXcx1Fz0WE7oPT")

34
35
36
37
# File 'lib/rspotify/player.rb', line 34

def play_context(device_id = nil, uri)
  params = {"context_uri": uri}
  play(device_id, params)
end

#play_track(device_id = nil, uri) ⇒ Object

Examples:

player = user.player
player.play_track(nil, "spotify:track:4iV5W9uYEdYUVa79Axb7Rh")
# User must be a premium subscriber for this feature to work.

58
59
60
61
# File 'lib/rspotify/player.rb', line 58

def play_track(device_id = nil, uri)
  params = {"uris": [uri]}
  play(device_id, params)
end

#play_tracks(device_id = nil, uris) ⇒ Object

Allow user to play a list of tracks. If `device_id` is not passed, the currently active spotify app will be triggered

Examples:

player = user.player
tracks_uris = ["spotify:track:4iV5W9uYEdYUVa79Axb7Rh", "spotify:track:1301WleyT98MSxVHPZCA6M"]
player.play_tracks(nil, tracks_uris)

46
47
48
49
# File 'lib/rspotify/player.rb', line 46

def play_tracks(device_id = nil, uris)
  params = {"uris": uris}
  play(device_id, params)
end

#playing?Boolean

Returns:

  • (Boolean)

24
25
26
# File 'lib/rspotify/player.rb', line 24

def playing?
  is_playing
end

#previousObject

Skip User’s Playback To Previous Track

Examples:

player = user.player
player.previous

156
157
158
159
# File 'lib/rspotify/player.rb', line 156

def previous
  url = 'me/player/previous'
  User.oauth_post(@user.id, url, {})
end

#queue(device_id = nil, uri) ⇒ Object

Add an item to the end of the user’s current playback queue If `device_id` is not passed, the currently active spotify app will be triggered

Examples:

player = user.player
player.queue("spotify:track:4iV5W9uYEdYUVa79Axb7Rh")

Parameters:

  • device_id (String) (defaults to: nil)

    the ID of the device to set the repeat state on.

  • uri (String)

    the spotify uri of the track to be queued


85
86
87
88
89
# File 'lib/rspotify/player.rb', line 85

def queue(device_id = nil, uri)
  url = "me/player/queue?uri=#{uri}"
  url = device_id.nil? ? url : "#{url}&device_id=#{device_id}"
  User.oauth_post(@user.id, url, {})
end

#repeat(device_id: nil, state: "context") ⇒ Object

Toggle the current user's player repeat status. If `device_id` is not passed, the currently active spotify app will be triggered. If `state` is not passed, the currently active context will be set to repeat.

Examples:

player = user.player
player.repeat(state: 'track')

Parameters:

  • device_id (String) (defaults to: nil)

    the ID of the device to set the repeat state on.

  • state (String) (defaults to: "context")

    the repeat state. Defaults to the current play context.

See Also:


103
104
105
106
107
108
109
# File 'lib/rspotify/player.rb', line 103

def repeat(device_id: nil, state: "context")
  url = "me/player/repeat"
  url += "?state=#{state}"
  url += "&device_id=#{device_id}" if device_id

  User.oauth_put(@user.id, url, {})
end

#seek(position_ms) ⇒ Object


178
179
180
181
# File 'lib/rspotify/player.rb', line 178

def seek(position_ms)
  url = "me/player/seek?position_ms=#{position_ms}"
  User.oauth_put(@user.id, url, {})
end

#shuffle(device_id: nil, state: true) ⇒ Object

Toggle the current user's shuffle status. If `device_id` is not passed, the currently active spotify app will be triggered. If `state` is not passed, shuffle mode will be turned on.

Examples:

player = user.player
player.shuffle(state: false)

Parameters:

  • device_id (String) (defaults to: nil)

    the ID of the device to set the shuffle state on.

  • state (String) (defaults to: true)

    the shuffle state. Defaults to turning the shuffle behavior on.

See Also:


133
134
135
136
137
138
139
# File 'lib/rspotify/player.rb', line 133

def shuffle(device_id: nil, state: true)
  url = "me/player/shuffle"
  url += "?state=#{state}"
  url += "&device_id=#{device_id}" if device_id

  User.oauth_put(@user.id, url, {})
end

#volume(percent) ⇒ Object

Update the user's currently active player volume

Examples:

player = user.player
player.volume(50)

166
167
168
169
# File 'lib/rspotify/player.rb', line 166

def volume(percent)
  url = "me/player/volume?volume_percent=#{percent}"
  User.oauth_put(@user.id, url, {})
end