Implemented 'search video on selected instance' functionality

This commit is contained in:
Famille Bollu 2018-07-30 12:00:27 +02:00
parent 0f11b12350
commit ac976ab8cf
2 changed files with 66 additions and 17 deletions

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<addon id="plugin.video.peertube" name="PeerTube" version="0.1.1" provider-name="Cyrille Bollu">
<addon id="plugin.video.peertube" name="PeerTube" version="0.2.0" provider-name="Cyrille Bollu">
<requires>
<import addon="xbmc.python" version="2.25.0"/>
<import addon="script.module.addon.signals" version="0.0.3"/>
@ -20,6 +20,8 @@
<email>cyrille.bollu2@gmail.com</email>
<source>https://github.com/StCyr/plugin.video.peertube</source>
<news>
0.2.0
Implemented navigation in 'browse selected instance' menu
0.1.1
4th PoC.
First functional PoC with background download

View File

@ -9,6 +9,7 @@
# - When downloaded torrents are kept, do we want to seed them all the time,
# or only when the addon is running, or only when kodi is playing one,...?
# - Do sanity checks on received data
# - Handle languages better (with .po files)
import time, sys
import urllib2, json
@ -51,21 +52,15 @@ class PeertubeAddon():
return None
def list_videos(self, start):
def create_videos_list(self, videos)
"""
Create the list of playable videos in the Kodi interface.
:param start: string
:return: None
Create an array of xmbcgui.ListIten's to be displayed as a folder in Kodi's UI
:param videos: dict
:result listing: dict
"""
# Get the list of videos published by the instance
# TODO: Handle failures
# Make count configurable
# Set up pagination
xbmc.log('PeertubeAddon: Listing videos from instance ' + self.selected_inst, xbmc.LOGDEBUG)
req = self.selected_inst + '/api/v1/videos?count=' + str(self.items_per_page) + '&start=' + start
resp = urllib2.urlopen(req)
videos = json.load(resp)
# Create a list for our items
listing = []
# Return when no videos are found
if videos['total'] == 0:
@ -74,10 +69,8 @@ class PeertubeAddon():
else:
xbmc.log('PeertubeAddon: Found ' + str(videos['total']) + ' videos', xbmc.LOGDEBUG)
# Create a list for our items
listing = []
# Insert a 'Previous' button when start > 0
# TODO: See if icon can be changed here and for the "Next" button (by an arraow for example)
if int(start) > 0:
start = int(start) - self.items_per_page
list_item = xbmcgui.ListItem(label='Previous')
@ -134,6 +127,57 @@ class PeertubeAddon():
url = '{0}?action=browse&start={1}'.format(self.plugin_url, str(start))
listing.append((url, list_item, True))
return listing
def search_videos(self, start):
"""
Search for videos on selected instance
:param start: string
:result: None
"""
# Show a 'Search video' dialog
search = xbmcgui.Dialog().input(heading='Search video on ' + self.selected_inst, type=xbmcgui.INPUT_ALPHANUM)
# Go back to main menu when user cancels
if not search:
self.main_menu()
# Search for videos on selected PeerTube instance
# TODO: Handle failures
# Make count configurable
# Sort videos by rating ( + make the sort method configurabe)
xbmc.log('PeertubeAddon: Searching for videos on instance ' + self.selected_inst, xbmc.LOGDEBUG)
req = self.selected_inst + '/api/v1/searchs/videos?search=' + search + '&count=' + str(self.items_per_page) + '&start=' + start
resp = urllib2.urlopen(req)
videos = json.load(resp)
# Create array of xmbcgui.ListItem's
listing = create_videos_list(videos)
# Add our listing to Kodi.
xbmcplugin.addDirectoryItems(self.plugin_id, listing, len(listing))
xbmcplugin.endOfDirectory(self.plugin_id)
def list_videos(self, start):
"""
Create the list of playable videos in the Kodi interface.
:param start: string
:return: None
"""
# Get the list of videos published by the instance
# TODO: Handle failures
# Make count configurable
# Sort videos by rating ( + make the sort method configurabe)
xbmc.log('PeertubeAddon: Listing videos from instance ' + self.selected_inst, xbmc.LOGDEBUG)
req = self.selected_inst + '/api/v1/videos?count=' + str(self.items_per_page) + '&start=' + start
resp = urllib2.urlopen(req)
videos = json.load(resp)
# Create array of xmbcgui.ListItem's
listing = create_videos_list(videos)
# Add our listing to Kodi.
xbmcplugin.addDirectoryItems(self.plugin_id, listing, len(listing))
xbmcplugin.endOfDirectory(self.plugin_id)
@ -188,7 +232,7 @@ class PeertubeAddon():
# 2nd menu entry
list_item = xbmcgui.ListItem(label='Search on selected instance')
url = '{0}?action=select_inst'.format(self.plugin_url)
url = '{0}?action=search&start=0'.format(self.plugin_url)
listing.append((url, list_item, False))
# 3rd menu entry
@ -222,6 +266,9 @@ class PeertubeAddon():
if params['action'] == 'browse':
# List videos on selected instance
self.list_videos(params['start'])
elif params['action'] == 'search':
# Search for videos on selecgted instance
self.search_videos()
elif params['action'] == 'play':
# Play video from provided URL.
self.play_video(params['url'])