Class: Rockbox::Api::Library

Inherits:
Object
  • Object
show all
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

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

#albumsObject


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

#artistsObject


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_albumsObject



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_tracksObject



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

#scanObject


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

#tracksObject


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