[grilo-plugins/0.2.x] lua-factory: Add Spotify cover source
- From: Juan A. Suárez Romero <jasuarez src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [grilo-plugins/0.2.x] lua-factory: Add Spotify cover source
- Date: Sat, 19 Dec 2015 23:42:10 +0000 (UTC)
commit 9c64c611c460f78aa4699e432cd6776b25f2517c
Author: Bastien Nocera <hadess hadess net>
Date: Thu Sep 10 11:57:17 2015 +0200
lua-factory: Add Spotify cover source
https://bugzilla.gnome.org/show_bug.cgi?id=754811
src/lua-factory/sources/Makefile.am | 1 +
src/lua-factory/sources/grl-spotify-cover.lua | 99 +++++++++++++++++++++++++
2 files changed, 100 insertions(+), 0 deletions(-)
---
diff --git a/src/lua-factory/sources/Makefile.am b/src/lua-factory/sources/Makefile.am
index 325842c..a762df1 100644
--- a/src/lua-factory/sources/Makefile.am
+++ b/src/lua-factory/sources/Makefile.am
@@ -9,6 +9,7 @@ include $(top_srcdir)/gtester.mk
lua_sources_DATA = \
grl-metrolyrics.lua \
+ grl-spotify-cover.lua \
grl-radiofrance.lua \
grl-euronews.lua \
grl-guardianvideos.lua \
diff --git a/src/lua-factory/sources/grl-spotify-cover.lua b/src/lua-factory/sources/grl-spotify-cover.lua
new file mode 100644
index 0000000..1f7ad1c
--- /dev/null
+++ b/src/lua-factory/sources/grl-spotify-cover.lua
@@ -0,0 +1,99 @@
+--[[
+ * Copyright (C) 2015 Bastien Nocera.
+ *
+ * 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-spotify-cover",
+ name = "Spotify Cover",
+ description = "a source for music covers",
+ supported_keys = { 'thumbnail' },
+ supported_media = { 'audio' },
+ resolve_keys = {
+ ["type"] = "audio",
+ required = { "artist", "album" },
+ },
+ tags = { 'music', 'net:internet' },
+}
+
+------------------
+-- Source utils --
+------------------
+
+SPOTIFY_SEARCH_ALBUM = 'https://api.spotify.com/v1/search?q=album:%s+artist:%s&type=album&limit=1'
+
+---------------------------------
+-- Handlers of Grilo functions --
+---------------------------------
+
+function grl_source_resolve()
+ local url, req
+ local artist, title
+
+ req = grl.get_media_keys()
+ if not req or not req.artist or not req.album
+ or #req.artist == 0 or #req.album == 0 then
+ grl.callback()
+ return
+ end
+
+ -- Prepare artist and title strings to the url
+ artist = grl.encode(req.artist)
+ album = grl.encode(req.album)
+ url = string.format(SPOTIFY_SEARCH_ALBUM, album, artist)
+
+ grl.fetch(url, "fetch_page_cb")
+end
+
+---------------
+-- Utilities --
+---------------
+
+function fetch_page_cb(result)
+ local json = {}
+
+ if not result then
+ grl.callback()
+ return
+ end
+
+ json = grl.lua.json.string_to_table(result)
+ if not json or
+ not json.albums or
+ json.albums.total == 0 or
+ not json.albums.items or
+ not #json.albums.items or
+ not json.albums.items[1].images then
+ grl.callback()
+ return
+ end
+
+ local media = {}
+ media.thumbnail = {}
+ for i, item in ipairs(json.albums.items[1].images) do
+ table.insert(media.thumbnail, item.url)
+ end
+
+ grl.callback(media, 0)
+end
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]