mirror of
https://github.com/danbee/mpd-client
synced 2025-03-04 08:39:09 +00:00
50 lines
843 B
Ruby
50 lines
843 B
Ruby
require 'sinatra'
|
|
require "sinatra/namespace"
|
|
require 'json'
|
|
require 'ruby-mpd'
|
|
require 'cgi'
|
|
|
|
class MPDClient < Sinatra::Base
|
|
register Sinatra::Namespace
|
|
|
|
namespace '/api' do
|
|
|
|
get '/albums' do
|
|
JSON mpd.albums
|
|
end
|
|
|
|
get '/artists/:artist' do
|
|
JSON mpd.albums(CGI.unescape(params[:artist]))
|
|
end
|
|
|
|
get '/albums/:album' do
|
|
JSON get_songs_by_album(CGI.unescape(params[:album]))
|
|
end
|
|
|
|
get '/artists/:artist/:album' do
|
|
JSON get_songs_by_album(CGI.unescape(params[:album]))
|
|
end
|
|
|
|
get '/artists' do
|
|
JSON mpd.artists
|
|
end
|
|
|
|
end
|
|
|
|
private
|
|
|
|
def get_songs_by_album(album)
|
|
mpd.search(:album, album).map do |song|
|
|
{ tracknumber: song.track,
|
|
title: song.title }
|
|
end
|
|
end
|
|
|
|
def mpd
|
|
@mpd ||= MPD.new
|
|
@mpd.connect unless @mpd.connected?
|
|
@mpd
|
|
end
|
|
|
|
end
|