Current section
Files
Jump to
Current section
Files
src/rockbox@library.erl
-module(rockbox@library).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/rockbox/library.gleam").
-export([albums/1, album/2, liked_albums/1, like_album/2, unlike_album/2, artists/1, artist/2, tracks/1, track/2, liked_tracks/1, like_track/2, unlike_track/2, search/2, scan/1]).
-if(?OTP_RELEASE >= 27).
-define(MODULEDOC(Str), -moduledoc(Str)).
-define(DOC(Str), -doc(Str)).
-else.
-define(MODULEDOC(Str), -compile([])).
-define(DOC(Str), -compile([])).
-endif.
?MODULEDOC(
" Browse and search the indexed music library.\n"
"\n"
" ```gleam\n"
" let assert Ok(albums) = library.albums(client)\n"
" let assert Ok(results) = library.search(client, \"miles davis\")\n"
" ```\n"
).
-file("src/rockbox/library.gleam", 43).
-spec albums(rockbox:client()) -> {ok, list(rockbox@types:album())} |
{error, rockbox@error:error()}.
albums(Client) ->
Decoder = begin
gleam@dynamic@decode:field(
<<"albums"/utf8>>,
gleam@dynamic@decode:list(rockbox@types:album_decoder()),
fun(Albums) -> gleam@dynamic@decode:success(Albums) end
)
end,
Q = <<"
fragment AlbumFields on Album {
id title artist year yearString albumArt md5 artistId copyrightMessage
}
"/utf8,
"
query Albums {
albums { ...AlbumFields tracks { id title path length albumArt } }
}
"/utf8>>,
rockbox:'query'(Client, Q, gleam@json:object([]), Decoder).
-file("src/rockbox/library.gleam", 56).
-spec album(rockbox:client(), binary()) -> {ok,
gleam@option:option(rockbox@types:album())} |
{error, rockbox@error:error()}.
album(Client, Id) ->
Decoder = begin
gleam@dynamic@decode:field(
<<"album"/utf8>>,
gleam@dynamic@decode:optional(rockbox@types:album_decoder()),
fun(Album) -> gleam@dynamic@decode:success(Album) end
)
end,
Q = <<<<"
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
}
"/utf8,
"
fragment AlbumFields on Album {
id title artist year yearString albumArt md5 artistId copyrightMessage
}
"/utf8>>/binary,
"
query Album($id: String!) {
album(id: $id) { ...AlbumFields tracks { ...TrackFields } }
}
"/utf8>>,
rockbox:'query'(
Client,
Q,
gleam@json:object([{<<"id"/utf8>>, gleam@json:string(Id)}]),
Decoder
).
-file("src/rockbox/library.gleam", 72).
-spec liked_albums(rockbox:client()) -> {ok, list(rockbox@types:album())} |
{error, rockbox@error:error()}.
liked_albums(Client) ->
Decoder = begin
gleam@dynamic@decode:field(
<<"likedAlbums"/utf8>>,
gleam@dynamic@decode:list(rockbox@types:album_decoder()),
fun(Albums) -> gleam@dynamic@decode:success(Albums) end
)
end,
Q = <<"
fragment AlbumFields on Album {
id title artist year yearString albumArt md5 artistId copyrightMessage
}
"/utf8,
"
query LikedAlbums { likedAlbums { ...AlbumFields } }
"/utf8>>,
rockbox:'query'(Client, Q, gleam@json:object([]), Decoder).
-file("src/rockbox/library.gleam", 86).
-spec like_album(rockbox:client(), binary()) -> {ok, nil} |
{error, rockbox@error:error()}.
like_album(Client, Id) ->
rockbox:execute(
Client,
<<"mutation LikeAlbum($id: String!) { likeAlbum(id: $id) }"/utf8>>,
gleam@json:object([{<<"id"/utf8>>, gleam@json:string(Id)}])
).
-file("src/rockbox/library.gleam", 94).
-spec unlike_album(rockbox:client(), binary()) -> {ok, nil} |
{error, rockbox@error:error()}.
unlike_album(Client, Id) ->
rockbox:execute(
Client,
<<"mutation UnlikeAlbum($id: String!) { unlikeAlbum(id: $id) }"/utf8>>,
gleam@json:object([{<<"id"/utf8>>, gleam@json:string(Id)}])
).
-file("src/rockbox/library.gleam", 106).
-spec artists(rockbox:client()) -> {ok, list(rockbox@types:artist())} |
{error, rockbox@error:error()}.
artists(Client) ->
Decoder = begin
gleam@dynamic@decode:field(
<<"artists"/utf8>>,
gleam@dynamic@decode:list(rockbox@types:artist_decoder()),
fun(Artists) -> gleam@dynamic@decode:success(Artists) end
)
end,
Q = <<"
fragment ArtistFields on Artist {
id name bio image
}
"/utf8,
"
query Artists {
artists { ...ArtistFields albums { id title albumArt year } }
}
"/utf8>>,
rockbox:'query'(Client, Q, gleam@json:object([]), Decoder).
-file("src/rockbox/library.gleam", 119).
-spec artist(rockbox:client(), binary()) -> {ok,
gleam@option:option(rockbox@types:artist())} |
{error, rockbox@error:error()}.
artist(Client, Id) ->
Decoder = begin
gleam@dynamic@decode:field(
<<"artist"/utf8>>,
gleam@dynamic@decode:optional(rockbox@types:artist_decoder()),
fun(Artist) -> gleam@dynamic@decode:success(Artist) end
)
end,
Q = <<<<"
fragment ArtistFields on Artist {
id name bio image
}
"/utf8,
"
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
}
"/utf8>>/binary,
"
query Artist($id: String!) {
artist(id: $id) {
...ArtistFields
albums {
id title albumArt year yearString md5 artistId
tracks { id title path length }
}
tracks { ...TrackFields }
}
}
"/utf8>>,
rockbox:'query'(
Client,
Q,
gleam@json:object([{<<"id"/utf8>>, gleam@json:string(Id)}]),
Decoder
).
-file("src/rockbox/library.gleam", 146).
-spec tracks(rockbox:client()) -> {ok, list(rockbox@types:track())} |
{error, rockbox@error:error()}.
tracks(Client) ->
Decoder = begin
gleam@dynamic@decode:field(
<<"tracks"/utf8>>,
gleam@dynamic@decode:list(rockbox@types:track_decoder()),
fun(Tracks) -> gleam@dynamic@decode:success(Tracks) end
)
end,
Q = <<"
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
}
"/utf8,
"
query Tracks { tracks { ...TrackFields } }
"/utf8>>,
rockbox:'query'(Client, Q, gleam@json:object([]), Decoder).
-file("src/rockbox/library.gleam", 157).
-spec track(rockbox:client(), binary()) -> {ok,
gleam@option:option(rockbox@types:track())} |
{error, rockbox@error:error()}.
track(Client, Id) ->
Decoder = begin
gleam@dynamic@decode:field(
<<"track"/utf8>>,
gleam@dynamic@decode:optional(rockbox@types:track_decoder()),
fun(Track) -> gleam@dynamic@decode:success(Track) end
)
end,
Q = <<"
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
}
"/utf8,
"
query Track($id: String!) { track(id: $id) { ...TrackFields } }
"/utf8>>,
rockbox:'query'(
Client,
Q,
gleam@json:object([{<<"id"/utf8>>, gleam@json:string(Id)}]),
Decoder
).
-file("src/rockbox/library.gleam", 171).
-spec liked_tracks(rockbox:client()) -> {ok, list(rockbox@types:track())} |
{error, rockbox@error:error()}.
liked_tracks(Client) ->
Decoder = begin
gleam@dynamic@decode:field(
<<"likedTracks"/utf8>>,
gleam@dynamic@decode:list(rockbox@types:track_decoder()),
fun(Tracks) -> gleam@dynamic@decode:success(Tracks) end
)
end,
Q = <<"
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
}
"/utf8,
"
query LikedTracks { likedTracks { ...TrackFields } }
"/utf8>>,
rockbox:'query'(Client, Q, gleam@json:object([]), Decoder).
-file("src/rockbox/library.gleam", 185).
-spec like_track(rockbox:client(), binary()) -> {ok, nil} |
{error, rockbox@error:error()}.
like_track(Client, Id) ->
rockbox:execute(
Client,
<<"mutation LikeTrack($id: String!) { likeTrack(id: $id) }"/utf8>>,
gleam@json:object([{<<"id"/utf8>>, gleam@json:string(Id)}])
).
-file("src/rockbox/library.gleam", 193).
-spec unlike_track(rockbox:client(), binary()) -> {ok, nil} |
{error, rockbox@error:error()}.
unlike_track(Client, Id) ->
rockbox:execute(
Client,
<<"mutation UnlikeTrack($id: String!) { unlikeTrack(id: $id) }"/utf8>>,
gleam@json:object([{<<"id"/utf8>>, gleam@json:string(Id)}])
).
-file("src/rockbox/library.gleam", 205).
-spec search(rockbox:client(), binary()) -> {ok, rockbox@types:search_results()} |
{error, rockbox@error:error()}.
search(Client, Term) ->
Decoder = begin
gleam@dynamic@decode:field(
<<"search"/utf8>>,
rockbox@types:search_results_decoder(),
fun(Results) -> gleam@dynamic@decode:success(Results) end
)
end,
Q = <<<<<<"
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
}
"/utf8,
"
fragment AlbumFields on Album {
id title artist year yearString albumArt md5 artistId copyrightMessage
}
"/utf8>>/binary,
"
fragment ArtistFields on Artist {
id name bio image
}
"/utf8>>/binary,
"
query Search($term: String!) {
search(term: $term) {
artists { ...ArtistFields }
albums { ...AlbumFields }
tracks { ...TrackFields }
likedTracks { ...TrackFields }
likedAlbums { ...AlbumFields }
}
}
"/utf8>>,
rockbox:'query'(
Client,
Q,
gleam@json:object([{<<"term"/utf8>>, gleam@json:string(Term)}]),
Decoder
).
-file("src/rockbox/library.gleam", 228).
-spec scan(rockbox:client()) -> {ok, nil} | {error, rockbox@error:error()}.
scan(Client) ->
rockbox:execute(
Client,
<<"mutation ScanLibrary { scanLibrary }"/utf8>>,
gleam@json:object([])
).