summaryrefslogtreecommitdiff
path: root/kodi-mediabrowser/main.py
diff options
context:
space:
mode:
Diffstat (limited to 'kodi-mediabrowser/main.py')
-rw-r--r--kodi-mediabrowser/main.py62
1 files changed, 62 insertions, 0 deletions
diff --git a/kodi-mediabrowser/main.py b/kodi-mediabrowser/main.py
new file mode 100644
index 0000000..ad70506
--- /dev/null
+++ b/kodi-mediabrowser/main.py
@@ -0,0 +1,62 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+# Module: default
+import sys
+from urlparse import parse_qsl
+import xbmcgui
+import xbmcplugin
+import xbmcaddon
+import requests
+from urllib import quote
+import logging
+
+logging.basicConfig(level=logging.INFO)
+
+# Get the plugin url in plugin:// notation.
+_url = sys.argv[0]
+# Get the plugin handle as an integer number.
+_handle = int(sys.argv[1])
+
+addon = xbmcaddon.Addon()
+
+endpoint = addon.getSetting('endpoint')
+
+
+def list_files(path):
+ resp = requests.get(endpoint + path)
+ data = resp.json()
+ files = data['files']
+
+ listing = []
+ for file in files:
+ list_item = xbmcgui.ListItem(label=file['name'])
+
+ if file['type'] == 'directory':
+ list_item.setInfo('video', {'title': file['name'] + '/'})
+ url = '{0}?action=list_files&path={1}'.format(_url, quote(file['path']))
+ listing.append((url, list_item, True))
+ else:
+ list_item.setInfo('video', {'title': file['name']})
+ list_item.setArt({'thumb': endpoint + file['poster']})
+ list_item.setProperty('IsPlayable', 'true')
+ url = endpoint + file['m3u8']
+ listing.append((url, list_item, False))
+ xbmcplugin.addDirectoryItems(_handle, listing, len(listing))
+ xbmcplugin.addSortMethod(_handle, xbmcplugin.SORT_METHOD_LABEL_IGNORE_THE)
+ xbmcplugin.endOfDirectory(_handle)
+
+
+def router(paramstring):
+ params = dict(parse_qsl(paramstring))
+ if params:
+ if params['action'] == 'list_files':
+ # Display the list of videos in a provided category.
+ list_videos(params['path'])
+ else:
+ raise Exception('Invalid params')
+ else:
+ list_files('/json/')
+
+
+if __name__ == '__main__':
+ router(sys.argv[2][1:])