[grilo-plugins] lua-factory: Add Last.fm plugin



commit 688024e9d417d294d127c17d6daff0e85ccb693e
Author: Bastien Nocera <hadess hadess net>
Date:   Thu Sep 10 15:17:04 2015 +0200

    lua-factory: Add Last.fm plugin
    
    https://bugzilla.gnome.org/show_bug.cgi?id=700276

 src/lua-factory/sources/Makefile.am          |    1 +
 src/lua-factory/sources/grl-lastfm-cover.lua |   88 ++++++++++++++++++++++++++
 2 files changed, 89 insertions(+), 0 deletions(-)
---
diff --git a/src/lua-factory/sources/Makefile.am b/src/lua-factory/sources/Makefile.am
index a762df1..2bb2b73 100644
--- a/src/lua-factory/sources/Makefile.am
+++ b/src/lua-factory/sources/Makefile.am
@@ -10,6 +10,7 @@ include $(top_srcdir)/gtester.mk
 lua_sources_DATA =                                     \
        grl-metrolyrics.lua                             \
        grl-spotify-cover.lua                           \
+       grl-lastfm-cover.lua                            \
        grl-radiofrance.lua                             \
        grl-euronews.lua                                \
        grl-guardianvideos.lua                          \
diff --git a/src/lua-factory/sources/grl-lastfm-cover.lua b/src/lua-factory/sources/grl-lastfm-cover.lua
new file mode 100644
index 0000000..9f78c67
--- /dev/null
+++ b/src/lua-factory/sources/grl-lastfm-cover.lua
@@ -0,0 +1,88 @@
+--[[
+ * 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-lastfm-cover",
+  name = "Last.fm Cover",
+  description = "a source for music covers",
+  goa_account_provider = 'lastfm',
+  goa_account_feature = 'music',
+  supported_keys = { 'thumbnail' },
+  supported_media = { 'audio' },
+  resolve_keys = {
+    ["type"] = "audio",
+    required = { "artist", "album" },
+  },
+  tags = { 'music', 'net:internet', 'net:plaintext' },
+}
+
+------------------
+-- Source utils --
+------------------
+
+LASTFM_SEARCH_ALBUM = 'http://ws.audioscrobbler.com/2.0/?method=album.getInfo&api_key=%s&artist=%s&album=%s'
+
+---------------------------------
+-- 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(LASTFM_SEARCH_ALBUM, grl.goa_consumer_key(), artist, album)
+  grl.fetch(url, "fetch_page_cb")
+end
+
+---------------
+-- Utilities --
+---------------
+
+function fetch_page_cb(result)
+  if not result then
+    grl.callback()
+    return
+  end
+
+  local media = {}
+  media.thumbnail = {}
+  for k, v in string.gmatch(result, '<image size="(.-)">(.-)</image>') do
+    grl.debug ('Image size ' .. k .. ' = ' .. v)
+    table.insert(media.thumbnail, v)
+  end
+
+  grl.callback(media, 0)
+end


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]