Class: Rockbox::Api::Library
- Inherits:
-
Object
- Object
- Rockbox::Api::Library
- Defined in:
- lib/rockbox/api/library.rb
Constant Summary collapse
- TRACK_FIELDS =
<<~GQL fragment TrackFields on Track { id title artist album genre disc trackString yearString composer comment albumArtist grouping discnum tracknum layer year bitrate frequency filesize length elapsed path albumId artistId genreId albumArt } GQL
- ALBUM_FIELDS =
<<~GQL fragment AlbumFields on Album { id title artist year yearString albumArt md5 artistId copyrightMessage } GQL
- ARTIST_FIELDS =
<<~GQL fragment ArtistFields on Artist { id name bio image } GQL
Instance Method Summary collapse
- #album(id) ⇒ Object
-
#albums ⇒ Object
——————————————————————— Albums ———————————————————————.
- #artist(id) ⇒ Object
-
#artists ⇒ Object
——————————————————————— Artists ———————————————————————.
-
#initialize(http) ⇒ Library
constructor
A new instance of Library.
- #like_album(id) ⇒ Object
- #like_track(id) ⇒ Object
- #liked_albums ⇒ Object
- #liked_tracks ⇒ Object
-
#scan ⇒ Object
——————————————————————— Library management ———————————————————————.
- #search(term) ⇒ Rockbox::SearchResults
- #track(id) ⇒ Object
-
#tracks ⇒ Object
——————————————————————— Tracks ———————————————————————.
- #unlike_album(id) ⇒ Object
- #unlike_track(id) ⇒ Object
Constructor Details
#initialize(http) ⇒ Library
Returns a new instance of Library.
28 29 30 |
# File 'lib/rockbox/api/library.rb', line 28 def initialize(http) @http = http end |
Instance Method Details
#album(id) ⇒ Object
44 45 46 47 48 49 50 51 |
# File 'lib/rockbox/api/library.rb', line 44 def album(id) data = @http.execute(<<~GQL, { id: id }) #{TRACK_FIELDS} #{ALBUM_FIELDS} query Album($id: String!) { album(id: $id) { ...AlbumFields tracks { ...TrackFields } } } GQL Album.from_hash(data[:album]) end |
#albums ⇒ Object
Albums
36 37 38 39 40 41 42 |
# File 'lib/rockbox/api/library.rb', line 36 def albums data = @http.execute(<<~GQL) #{ALBUM_FIELDS} query Albums { albums { ...AlbumFields tracks { id title path length albumArt } } } GQL Array(data[:albums]).map { |a| Album.from_hash(a) } end |
#artist(id) ⇒ Object
80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/rockbox/api/library.rb', line 80 def artist(id) data = @http.execute(<<~GQL, { id: id }) #{ARTIST_FIELDS} #{TRACK_FIELDS} query Artist($id: String!) { artist(id: $id) { ...ArtistFields albums { id title albumArt year yearString md5 artistId tracks { id title path length } } tracks { ...TrackFields } } } GQL Artist.from_hash(data[:artist]) end |
#artists ⇒ Object
Artists
72 73 74 75 76 77 78 |
# File 'lib/rockbox/api/library.rb', line 72 def artists data = @http.execute(<<~GQL) #{ARTIST_FIELDS} query Artists { artists { ...ArtistFields albums { id title albumArt year } } } GQL Array(data[:artists]).map { |a| Artist.from_hash(a) } end |
#like_album(id) ⇒ Object
58 59 60 61 |
# File 'lib/rockbox/api/library.rb', line 58 def like_album(id) @http.execute("mutation LikeAlbum($id: String!) { likeAlbum(id: $id) }", { id: id }) nil end |
#like_track(id) ⇒ Object
117 118 119 120 |
# File 'lib/rockbox/api/library.rb', line 117 def like_track(id) @http.execute("mutation LikeTrack($id: String!) { likeTrack(id: $id) }", { id: id }) nil end |
#liked_albums ⇒ Object
53 54 55 56 |
# File 'lib/rockbox/api/library.rb', line 53 def liked_albums data = @http.execute("#{ALBUM_FIELDS}\nquery LikedAlbums { likedAlbums { ...AlbumFields } }") Array(data[:liked_albums]).map { |a| Album.from_hash(a) } end |
#liked_tracks ⇒ Object
112 113 114 115 |
# File 'lib/rockbox/api/library.rb', line 112 def liked_tracks data = @http.execute("#{TRACK_FIELDS}\nquery LikedTracks { likedTracks { ...TrackFields } }") Array(data[:liked_tracks]).map { |t| Track.from_hash(t) } end |
#scan ⇒ Object
Library management
161 162 163 164 |
# File 'lib/rockbox/api/library.rb', line 161 def scan @http.execute("mutation ScanLibrary { scanLibrary }") nil end |
#search(term) ⇒ Rockbox::SearchResults
132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 |
# File 'lib/rockbox/api/library.rb', line 132 def search(term) data = @http.execute(<<~GQL, { term: term }) #{TRACK_FIELDS} #{ALBUM_FIELDS} #{ARTIST_FIELDS} query Search($term: String!) { search(term: $term) { artists { ...ArtistFields } albums { ...AlbumFields } tracks { ...TrackFields } likedTracks { ...TrackFields } likedAlbums { ...AlbumFields } } } GQL results = data[:search] || {} SearchResults.new( artists: Array(results[:artists]).map { |a| Artist.from_hash(a) }, albums: Array(results[:albums]).map { |a| Album.from_hash(a) }, tracks: Array(results[:tracks]).map { |t| Track.from_hash(t) }, liked_tracks: Array(results[:liked_tracks]).map { |t| Track.from_hash(t) }, liked_albums: Array(results[:liked_albums]).map { |a| Album.from_hash(a) } ) end |
#track(id) ⇒ Object
104 105 106 107 108 109 110 |
# File 'lib/rockbox/api/library.rb', line 104 def track(id) data = @http.execute( "#{TRACK_FIELDS}\nquery Track($id: String!) { track(id: $id) { ...TrackFields } }", { id: id } ) Track.from_hash(data[:track]) end |
#tracks ⇒ Object
Tracks
99 100 101 102 |
# File 'lib/rockbox/api/library.rb', line 99 def tracks data = @http.execute("#{TRACK_FIELDS}\nquery Tracks { tracks { ...TrackFields } }") Array(data[:tracks]).map { |t| Track.from_hash(t) } end |
#unlike_album(id) ⇒ Object
63 64 65 66 |
# File 'lib/rockbox/api/library.rb', line 63 def unlike_album(id) @http.execute("mutation UnlikeAlbum($id: String!) { unlikeAlbum(id: $id) }", { id: id }) nil end |
#unlike_track(id) ⇒ Object
122 123 124 125 |
# File 'lib/rockbox/api/library.rb', line 122 def unlike_track(id) @http.execute("mutation UnlikeTrack($id: String!) { unlikeTrack(id: $id) }", { id: id }) nil end |