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 0000000..f3cdd9e
Binary files /dev/null and b/icon.png differ