From 41379668020df3b05daaac6d5e8ef266c3fcc09e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Harrault?= <benoit@harrault.fr> Date: Mon, 22 Oct 2018 21:49:56 +0200 Subject: [PATCH] Initial release --- LICENSE.txt | 21 ++++++++++++ README.md | 3 +- addon.xml | 16 +++++++++ default.py | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++++ icon.png | Bin 0 -> 14844 bytes 5 files changed, 132 insertions(+), 1 deletion(-) create mode 100644 LICENSE.txt create mode 100644 addon.xml create mode 100644 default.py create mode 100644 icon.png diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..86461da --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2018 Benoît Harrault + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README.md b/README.md index b360a96..3bd4df1 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,3 @@ -# plugin.audio.fip +# Fip Radio KODI Plugin +Listen to FIP radio streams diff --git a/addon.xml b/addon.xml new file mode 100644 index 0000000..d74a48b --- /dev/null +++ b/addon.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="UTF-8" standalone="yes"?> +<addon id="plugin.audio.fip" name="Fip, an eclectic music radio" version="0.0.1" provider-name="Benoît Harrault"> + <requires> + <import addon="xbmc.python" version="2.20.0"/> + </requires> + <extension point="xbmc.python.pluginsource" library="default.py"> + <provides>audio</provides> + </extension> + <extension point="xbmc.addon.metadata"> + <platform>all</platform> + <license>MIT</license> + <language>en</language> + <summary lang="en">Fip, an eclectic music radio</summary> + <description lang="en">Listen to fip french radio streams</description> + </extension> +</addon> diff --git a/default.py b/default.py new file mode 100644 index 0000000..530d11e --- /dev/null +++ b/default.py @@ -0,0 +1,93 @@ +# https://docs.python.org/2.7/ +import os +import sys +import urllib +import urlparse +# http://mirrors.kodi.tv/docs/python-docs/ +import xbmcaddon +import xbmcgui +import xbmcplugin + + +def get_streams(): + streams = {} + base_stream_url = 'https://direct.fipradio.fr/live/' + streams.update({ + 1: { + 'title': 'fip', + 'url': base_stream_url + 'fip-midfi.mp3?ID=radiofrance', + 'album_cover': 'https://www.fip.fr/sites/default/files/fip-quadri-filet.png' + }, + 2: { + 'title': 'fip / electro', + 'url': base_stream_url + 'fip-webradio8.mp3?ID=radiofrance', + 'album_cover': 'https://www.fip.fr/sites/default/files/asset/images/2017/05/webradio-electro-small.png' + }, + 3: { + 'title': 'fip / groove', + 'url': base_stream_url + 'fip-webradio3.mp3?ID=radiofrance', + 'album_cover': 'https://www.fip.fr/sites/default/files/asset/images/2016/06/webradio-groove-small.png' + }, + 4: { + 'title': 'fip / rock', + 'url': base_stream_url + 'fip-webradio1.mp3?ID=radiofrance', + 'album_cover': 'https://www.fip.fr/sites/default/files/asset/images/2016/06/webradio-rock-small.png' + } + }) + return streams + + +def build_url(query): + base_url = sys.argv[0] + return base_url + '?' + urllib.urlencode(query) + + +def build_streams_list(streams): + stream_list = [] + for stream in streams: + # create a list item using the stream filename for the label + li = xbmcgui.ListItem( + label=streams[stream]['title'], thumbnailImage=streams[stream]['album_cover']) + # set the fanart to the albumc cover + li.setProperty('fanart_image', streams[stream]['album_cover']) + # set the list item to playable + li.setProperty('IsPlayable', 'true') + # build the plugin url for Kodi + # Example: plugin://plugin.audio.example/?url=http%3A%2F%2Fwww.theaudiodb.com%2Ftestfiles%2F01-pablo_perez-your_ad_here.mp3&mode=stream&title=01-pablo_perez-your_ad_here.mp3 + url = build_url({ + 'mode': 'stream', + 'url': streams[stream]['url'], + 'title': streams[stream]['title'] + }) + # add the current list item to a list + stream_list.append((url, li, False)) + # add list to Kodi per Martijn + # http://forum.kodi.tv/showthread.php?tid=209948&pid=2094170#pid2094170 + xbmcplugin.addDirectoryItems(addon_handle, stream_list, len(stream_list)) + # set the content of the directory + xbmcplugin.setContent(addon_handle, 'songs') + xbmcplugin.endOfDirectory(addon_handle) + + +def play_stream(url): + play_item = xbmcgui.ListItem(path=url) + xbmcplugin.setResolvedUrl(addon_handle, True, listitem=play_item) + + +def main(): + args = urlparse.parse_qs(sys.argv[2][1:]) + mode = args.get('mode', None) + + # initial launch of add-on + if mode is None: + streams = get_streams() + build_streams_list(streams) + # a stream from the list has been selected + elif mode[0] == 'stream': + # pass the url of the stream to play_stream + play_stream(args['url'][0]) + + +if __name__ == '__main__': + addon_handle = int(sys.argv[1]) + main() diff --git a/icon.png b/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..9daae2081e5176374265fad9328bde373f7eccf5 GIT binary patch literal 14844 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 literal 0 HcmV?d00001 -- GitLab