Class: Rockbox::Api::SavedPlaylists

Inherits:
Object
  • Object
show all
Defined in:
lib/rockbox/api/saved_playlists.rb

Defined Under Namespace

Classes: CreateBuilder

Instance Method Summary collapse

Constructor Details

#initialize(http) ⇒ SavedPlaylists

Returns a new instance of SavedPlaylists.



8
9
10
# File 'lib/rockbox/api/saved_playlists.rb', line 8

def initialize(http)
  @http = http
end

Instance Method Details

#add_tracks(playlist_id, track_ids) ⇒ Object



87
88
89
90
91
92
93
94
# File 'lib/rockbox/api/saved_playlists.rb', line 87

def add_tracks(playlist_id, track_ids)
  @http.execute(
    "mutation AddTracksToSavedPlaylist($playlistId: String!, $trackIds: [String!]!) { " \
    "addTracksToSavedPlaylist(playlistId: $playlistId, trackIds: $trackIds) }",
    { playlist_id: playlist_id, track_ids: track_ids }
  )
  nil
end

#create(name:, description: nil, image: nil, folder_id: nil, track_ids: nil) {|builder| ... } ⇒ Object

Examples:

Builder-friendly

client.saved_playlists.create(name: "Late nights") do |p|
  p.description = "After-dark vibes"
  p.track_ids = ["abc", "def"]
end

Yields:

  • (builder)


42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/rockbox/api/saved_playlists.rb', line 42

def create(name:, description: nil, image: nil, folder_id: nil, track_ids: nil)
  builder = CreateBuilder.new(name, description, image, folder_id, track_ids)
  yield builder if block_given?

  data = @http.execute(<<~GQL, builder.to_variables)
    mutation CreateSavedPlaylist(
      $name: String!, $description: String, $image: String,
      $folderId: String, $trackIds: [String!]
    ) {
      createSavedPlaylist(
        name: $name, description: $description, image: $image,
        folderId: $folderId, trackIds: $trackIds
      ) {
        id name description image folderId trackCount createdAt updatedAt
      }
    }
  GQL
  SavedPlaylist.from_hash(data[:create_saved_playlist])
end

#create_folder(name) ⇒ Object



122
123
124
125
126
127
128
129
# File 'lib/rockbox/api/saved_playlists.rb', line 122

def create_folder(name)
  data = @http.execute(
    "mutation CreatePlaylistFolder($name: String!) { " \
    "createPlaylistFolder(name: $name) { id name createdAt updatedAt } }",
    { name: name }
  )
  SavedPlaylistFolder.from_hash(data[:create_playlist_folder])
end

#delete(id) ⇒ Object



79
80
81
82
83
84
85
# File 'lib/rockbox/api/saved_playlists.rb', line 79

def delete(id)
  @http.execute(
    "mutation DeleteSavedPlaylist($id: String!) { deleteSavedPlaylist(id: $id) }",
    { id: id }
  )
  nil
end

#delete_folder(id) ⇒ Object



131
132
133
134
135
136
137
# File 'lib/rockbox/api/saved_playlists.rb', line 131

def delete_folder(id)
  @http.execute(
    "mutation DeletePlaylistFolder($id: String!) { deletePlaylistFolder(id: $id) }",
    { id: id }
  )
  nil
end

#foldersObject


Folders




117
118
119
120
# File 'lib/rockbox/api/saved_playlists.rb', line 117

def folders
  data = @http.execute("query PlaylistFolders { playlistFolders { id name createdAt updatedAt } }")
  Array(data[:playlist_folders]).map { |f| SavedPlaylistFolder.from_hash(f) }
end

#get(id) ⇒ Object



21
22
23
24
25
26
27
28
# File 'lib/rockbox/api/saved_playlists.rb', line 21

def get(id)
  data = @http.execute(
    "query SavedPlaylist($id: String!) { " \
    "savedPlaylist(id: $id) { id name description image folderId trackCount createdAt updatedAt } }",
    { id: id }
  )
  SavedPlaylist.from_hash(data[:saved_playlist])
end

#list(folder_id: nil) ⇒ Object



12
13
14
15
16
17
18
19
# File 'lib/rockbox/api/saved_playlists.rb', line 12

def list(folder_id: nil)
  data = @http.execute(
    "query SavedPlaylists($folderId: String) { " \
    "savedPlaylists(folderId: $folderId) { id name description image folderId trackCount createdAt updatedAt } }",
    { folder_id: folder_id }.compact
  )
  Array(data[:saved_playlists]).map { |p| SavedPlaylist.from_hash(p) }
end

#play(playlist_id) ⇒ Object



105
106
107
108
109
110
111
# File 'lib/rockbox/api/saved_playlists.rb', line 105

def play(playlist_id)
  @http.execute(
    "mutation PlaySavedPlaylist($playlistId: String!) { playSavedPlaylist(playlistId: $playlistId) }",
    { playlist_id: playlist_id }
  )
  nil
end

#remove_track(playlist_id, track_id) ⇒ Object



96
97
98
99
100
101
102
103
# File 'lib/rockbox/api/saved_playlists.rb', line 96

def remove_track(playlist_id, track_id)
  @http.execute(
    "mutation RemoveTrackFromSavedPlaylist($playlistId: String!, $trackId: String!) { " \
    "removeTrackFromSavedPlaylist(playlistId: $playlistId, trackId: $trackId) }",
    { playlist_id: playlist_id, track_id: track_id }
  )
  nil
end

#track_ids(playlist_id) ⇒ Object



30
31
32
33
34
35
# File 'lib/rockbox/api/saved_playlists.rb', line 30

def track_ids(playlist_id)
  @http.execute(
    "query SavedPlaylistTrackIds($playlistId: String!) { savedPlaylistTrackIds(playlistId: $playlistId) }",
    { playlist_id: playlist_id }
  )[:saved_playlist_track_ids] || []
end

#update(id, name:, description: nil, image: nil, folder_id: nil) ⇒ Object

Examples:

client.saved_playlists.update("pl_123", name: "Renamed")


64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/rockbox/api/saved_playlists.rb', line 64

def update(id, name:, description: nil, image: nil, folder_id: nil)
  @http.execute(<<~GQL, { id: id, name: name, description: description, image: image, folder_id: folder_id }.compact)
    mutation UpdateSavedPlaylist(
      $id: String!, $name: String!, $description: String,
      $image: String, $folderId: String
    ) {
      updateSavedPlaylist(
        id: $id, name: $name, description: $description,
        image: $image, folderId: $folderId
      )
    }
  GQL
  nil
end