118 lines
3.0 KiB
Lua
118 lines
3.0 KiB
Lua
--[[
|
|
* Copyright (C) 2014 Victor Toso.
|
|
*
|
|
* Contact: Bastien Nocera <hadess@hadess.net>
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public License
|
|
* as published by the Free Software Foundation; version 2.1 of
|
|
* the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful, but
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
|
|
* 02110-1301 USA
|
|
*
|
|
--]]
|
|
|
|
---------------------------
|
|
-- Source initialization --
|
|
---------------------------
|
|
|
|
source = {
|
|
id = "grl-musicbrainz-coverart",
|
|
name = "Musicbrainz Cover Art",
|
|
description = "a source for coverart",
|
|
supported_keys = { "thumbnail" },
|
|
supported_media = { 'audio', 'video' },
|
|
resolve_keys = {
|
|
["type"] = "audio",
|
|
required = { "mb-release-id" },
|
|
},
|
|
tags = { 'music', 'net:internet' },
|
|
}
|
|
|
|
netopts = {
|
|
user_agent = "Grilo Source Musicbrainz/0.3.8",
|
|
}
|
|
|
|
MUSICBRAINZ_DEFAULT_QUERY = "https://coverartarchive.org/%s/%s"
|
|
MUSICBRAINZ_RELEASES = {
|
|
{name = "release", id = "mb_release_id"},
|
|
{name = "release-group", id = "mb_release_group_id"}
|
|
}
|
|
|
|
---------------------------------
|
|
-- Handlers of Grilo functions --
|
|
---------------------------------
|
|
|
|
function grl_source_resolve()
|
|
req = grl.get_media_keys()
|
|
if not req then
|
|
grl.callback()
|
|
return
|
|
end
|
|
|
|
-- try to get the cover art associated with the mb_album_id
|
|
-- if it does not exist, try the mb_release_group_id one
|
|
-- if none of them exist, return nothing.
|
|
local urls = {}
|
|
for _, release in ipairs(MUSICBRAINZ_RELEASES) do
|
|
id = req[release.id]
|
|
if id and #id > 0 then
|
|
urls[#urls + 1] = string.format(MUSICBRAINZ_DEFAULT_QUERY, release.name, id)
|
|
end
|
|
end
|
|
|
|
grl.fetch(urls, netopts, fetch_results_cb)
|
|
end
|
|
|
|
---------------
|
|
-- Utilities --
|
|
---------------
|
|
|
|
function fetch_results_cb(results)
|
|
local json_results = nil
|
|
|
|
for index, feed in ipairs(results) do
|
|
local json = grl.lua.json.string_to_table (feed)
|
|
if json and json.images then
|
|
json_results = json.images
|
|
break
|
|
end
|
|
end
|
|
|
|
if not json_results then
|
|
grl.callback()
|
|
return
|
|
end
|
|
|
|
media = build_media(json_results)
|
|
grl.callback(media)
|
|
end
|
|
|
|
function build_media(results)
|
|
local media = {}
|
|
local res = {}
|
|
|
|
if results and #results > 0 then
|
|
local result = results[1]
|
|
-- force urls to https
|
|
res[1] = result.image and result.image:gsub("http://", "https://") or nil
|
|
|
|
if result.thumbnails then
|
|
for _, url in pairs(result.thumbnails) do
|
|
res[#res + 1] = url and url:gsub("http://", "https://") or nil
|
|
end
|
|
end
|
|
end
|
|
|
|
media.thumbnail = res
|
|
return media
|
|
end
|