123 lines
3.6 KiB
Lua
123 lines
3.6 KiB
Lua
--[[
|
|
* Copyright (C) 2014 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
|
|
*
|
|
--]]
|
|
|
|
local stations = { 'franceinter', 'franceinfo', 'franceculture', 'francemusique', 'fipradio', 'lemouv' }
|
|
|
|
---------------------------
|
|
-- Source initialization --
|
|
---------------------------
|
|
|
|
source = {
|
|
id = "grl-radiofrance-lua",
|
|
name = "Radio France",
|
|
description = "A source for browsing Radio France radio stations",
|
|
supported_keys = { "id", "thumbnail", "title", "url", "mime-type" },
|
|
icon = 'resource:///org/gnome/grilo/plugins/radiofrance/radiofrance.png',
|
|
supported_media = 'audio',
|
|
tags = { 'radio', 'country:fr', 'net:internet', 'net:plaintext' }
|
|
}
|
|
|
|
------------------
|
|
-- Source utils --
|
|
------------------
|
|
|
|
function grl_source_browse(media_id)
|
|
if grl.get_options("skip") > 0 then
|
|
grl.callback()
|
|
else
|
|
local urls = {}
|
|
for index, item in pairs(stations) do
|
|
local url = 'http://www.' .. item .. '.fr/player'
|
|
table.insert(urls, url)
|
|
end
|
|
grl.fetch(urls, radiofrance_now_fetch_cb)
|
|
end
|
|
end
|
|
|
|
------------------------
|
|
-- Callback functions --
|
|
------------------------
|
|
|
|
-- return all the media found
|
|
function radiofrance_now_fetch_cb(results)
|
|
for index, result in pairs(results) do
|
|
local media = create_media(stations[index], result)
|
|
grl.callback(media, -1)
|
|
end
|
|
|
|
grl.callback()
|
|
end
|
|
|
|
-------------
|
|
-- Helpers --
|
|
-------------
|
|
|
|
function get_thumbnail(id)
|
|
local images = {}
|
|
images['franceinter'] = 'http://www.franceinter.fr/sites/all/themes/franceinter/logo.png'
|
|
images['franceinfo'] = 'http://www.franceinfo.fr/sites/all/themes/custom/france_info/logo.png'
|
|
images['franceculture'] = 'http://www.franceculture.fr/sites/all/themes/franceculture/images/logo.png'
|
|
images['francemusique'] = 'http://www.francemusique.fr/sites/all/themes/custom/france_musique/logo.png'
|
|
images['fipradio'] = 'http://www.fipradio.fr/sites/all/themes/custom/fip/logo.png'
|
|
images['lemouv'] = 'http://www.lemouv.fr/sites/all/themes/mouv/images/logo_119x119.png'
|
|
|
|
return images[id]
|
|
end
|
|
|
|
function get_title(id)
|
|
local names = {}
|
|
names['franceinter'] = 'France Inter'
|
|
names['franceinfo'] = 'France Info'
|
|
names['franceculture'] = 'France Culture'
|
|
names['francemusique'] = 'France Musique'
|
|
names['fipradio'] = 'Fip Radio'
|
|
names['lemouv'] = "Le Mouv'"
|
|
|
|
return names[id]
|
|
end
|
|
|
|
function create_media(id, result)
|
|
local media = {}
|
|
|
|
media.type = "audio"
|
|
media.mime_type = "audio/mpeg"
|
|
media.id = id
|
|
if media.id == 'fipradio' then
|
|
media.id = 'fip'
|
|
end
|
|
|
|
media.url = result:match("urlLive:'(http.-%mp3)")
|
|
if not media.url then
|
|
media.url = result:match('player" href="(http.-%.mp3)')
|
|
end
|
|
if not media.url then
|
|
media.url = result:match('data%-url%-live="(http.-%.mp3)')
|
|
end
|
|
|
|
media.title = get_title(id)
|
|
media.thumbnail = get_thumbnail(id)
|
|
|
|
-- FIXME Add metadata about the currently playing tracks
|
|
-- Available in 'http://www.' .. item .. '.fr/api/now&full=true'
|
|
return media
|
|
end
|