From cb3a19b3981f88b86a983622e8a5299731a5e904 Mon Sep 17 00:00:00 2001 From: "Roman Miroshnychenko (Work)" Date: Mon, 31 Aug 2015 13:09:38 +0300 Subject: [PATCH] Changed project structure --- addon.xml | 17 ++++++ default.py | 167 +++++++++++++++++++++++++++++++++++++++++++++++++++++ icon.png | Bin 0 -> 30799 bytes 3 files changed, 184 insertions(+) create mode 100644 addon.xml create mode 100644 default.py create mode 100644 icon.png diff --git a/addon.xml b/addon.xml new file mode 100644 index 0000000..f52a4c7 --- /dev/null +++ b/addon.xml @@ -0,0 +1,17 @@ + + + + + + + video + + + Example Kodi Video Plugin + An example video plugin for Kodi mediacenter. + Free sample videos are provided by www.vidsplay.com. + + diff --git a/default.py b/default.py new file mode 100644 index 0000000..ed4568b --- /dev/null +++ b/default.py @@ -0,0 +1,167 @@ +# -*- coding: utf-8 -*- +# Module: default +# Author: Roman V. M. +# Created on: 28.11.2014 +# License: GPL v.3 https://www.gnu.org/copyleft/gpl.html + +import sys +from urlparse import parse_qsl +import xbmcgui +import xbmcplugin + +# Get the plugin url in plugin:// notation. +__url__ = sys.argv[0] +# Get the plugin handle as an integer number. +__handle__ = int(sys.argv[1]) + +# Free sample videos are provided by www.vidsplay.com +# Here we use a fixed set of properties simply for demonstrating purposes +# In a "real life" plugin you will need to get info and links to video files/streams +# from some web-site or online service. +VIDEOS = {'Animals': [{'name': 'Crab', + 'thumb': 'http://www.vidsplay.com/vids/crab.jpg', + 'video': 'http://www.vidsplay.com/vids/crab.mp4'}, + {'name': 'Alligator', + 'thumb': 'http://www.vidsplay.com/vids/alligator.jpg', + 'video': 'http://www.vidsplay.com/vids/alligator.mp4'}, + {'name': 'Turtle', + 'thumb': 'http://www.vidsplay.com/vids/turtle.jpg', + 'video': 'http://www.vidsplay.com/vids/turtle.mp4'} + ], + 'Cars': [{'name': 'Postal Truck', + 'thumb': 'http://www.vidsplay.com/vids/us_postal.jpg', + 'video': 'http://www.vidsplay.com/vids/us_postal.mp4'}, + {'name': 'Traffic', + 'thumb': 'http://www.vidsplay.com/vids/traffic1.jpg', + 'video': 'http://www.vidsplay.com/vids/traffic1.avi'}, + {'name': 'Traffic Arrows', + 'thumb': 'http://www.vidsplay.com/vids/traffic_arrows.jpg', + 'video': 'http://www.vidsplay.com/vids/traffic_arrows.mp4'} + ], + 'Food': [{'name': 'Chicken', + 'thumb': 'http://www.vidsplay.com/vids/chicken.jpg', + 'video': 'http://www.vidsplay.com/vids/bbqchicken.mp4'}, + {'name': 'Hamburger', + 'thumb': 'http://www.vidsplay.com/vids/hamburger.jpg', + 'video': 'http://www.vidsplay.com/vids/hamburger.mp4'}, + {'name': 'Pizza', + 'thumb': 'http://www.vidsplay.com/vids/pizza.jpg', + 'video': 'http://www.vidsplay.com/vids/pizza.mp4'} + ]} + + +def get_categories(): + """ + Get the list of video categories. + Here you can insert some parsing code that retrieves + the list of video categories (e.g. 'Movies', 'TV-shows', 'Documentaries' etc.) + from some site or server. + :return: list + """ + return VIDEOS.keys() + + +def get_videos(category): + """ + Get the list of videofiles/streams. + Here you can insert some parsing code that retrieves + the list of videostreams in a given category from some site or server. + :param category: str + :return: list + """ + return VIDEOS[category] + + +def list_categories(): + """ + Create the list of video categories in the Kodi interface. + :return: None + """ + # Get video categories + categories = get_categories() + # Iterate through categories + for category in categories: + # Create a list item with a text label and a thumbnail image. + list_item = xbmcgui.ListItem(label=category, thumbnailImage=VIDEOS[category][0]['thumb']) + # Set a fanart image for the list item. + # Here we use the same image as the thumbnail for simplicity's sake. + list_item.setProperty('fanart_image', VIDEOS[category][0]['thumb']) + # Create a URL for the plugin recursive callback. + # Example: plugin://plugin.video.example/?action=listing&category=Animals + url = '{0}?action=listing&category={1}'.format(__url__, category) + # Add the list item to a virtual Kodi folder. + # isFolder=True means that this item opens a sub-list of lower level items. + xbmcplugin.addDirectoryItem(__handle__, url, list_item, isFolder=True) + # Add a sort method for the virtual folder items (alphabetically, ignore articles) + xbmcplugin.addSortMethod(__handle__, xbmcplugin.SORT_METHOD_LABEL_IGNORE_THE) + # Finish creating a virtual folder. + xbmcplugin.endOfDirectory(__handle__) + + +def list_videos(category): + """ + Create the list of playable videos in the Kodi interface. + :param category: str + :return: None + """ + # Get the list of videos in the category. + videos = get_videos(category) + # Iterate through videos. + for video in videos: + # Create a list item with a text label and a thumbnail image. + list_item = xbmcgui.ListItem(label=video['name'], thumbnailImage=video['thumb']) + # Set a fanart image for the list item. + # Here we use the same image as the thumbnail for simplicity's sake. + list_item.setProperty('fanart_image', video['thumb']) + # Set 'IsPlayable' property to 'true'. + # This is mandatory for playable items! + list_item.setProperty('IsPlayable', 'true') + # Create a URL for the plugin recursive callback. + # Example: plugin://plugin.video.example/?action=play&video=http://www.vidsplay.com/vids/crab.mp4 + url = '{0}?action=play&video={1}'.format(__url__, video['video']) + # Add the list item to a virtual Kodi folder. + # isFolder=False means that this item won't open any sub-list. + xbmcplugin.addDirectoryItem(__handle__, url, list_item, isFolder=False) + # Finish creating a virtual folder. + xbmcplugin.endOfDirectory(__handle__) + + +def play_video(path): + """ + Play a video by the provided path. + :param path: str + :return: None + """ + # Create a playable item with a path to play. + play_item = xbmcgui.ListItem(path=path) + # Pass the item to the Kodi player. + xbmcplugin.setResolvedUrl(__handle__, True, listitem=play_item) + + +def router(paramstring): + """ + Router function that calls other functions + depending on the provided paramstring + :param paramstring: + :return: + """ + # Parse a URL-encoded paramstring to the dictionary of + # {: } elements + params = dict(parse_qsl(paramstring[1:])) + # Check the parameters passed to the plugin + if params: + if params['action'] == 'listing': + # Display the list of videos in a provided category. + list_videos(params['category']) + elif params['action'] == 'play': + # Play a video from a provided URL. + play_video(params['video']) + else: + # If the plugin is called from Kodi UI without any parameters, + # display the list of video categories + list_categories() + + +if __name__ == '__main__': + # Call the router function and pass the plugin call parameters to it. + router(sys.argv[2]) diff --git a/icon.png b/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f3cdd9e56819d8c8e13a1bd6e6586fc57989b056 GIT binary patch literal 30799 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 H=MnRNYwh~- literal 0 HcmV?d00001