Files
Oli Passey f0bbdc56fb September 2018 Update
Added - Koding AIO to repo as addons depend on it
Updated - DefCon now has 2018 talks in
2018-09-17 19:54:29 +01:00

141 lines
5.1 KiB
Python

# -*- coding: utf-8 -*-
# script.module.python.koding.aio
# Python Koding AIO (c) by TOTALREVOLUTION LTD (support@trmc.freshdesk.com)
# Python Koding AIO is licensed under a
# Creative Commons Attribution-NonCommercial-NoDerivatives 4.0 International License.
# You should have received a copy of the license along with this
# work. If not, see http://creativecommons.org/licenses/by-nc-nd/4.0.
# Please make sure you've read and understood the license, this code can NOT be used commercially
# and it can NOT be modified and redistributed. If you're found to be in breach of this license
# then any affected add-ons will be blacklisted and will not be able to work on the same system
# as any other add-ons which use this code. Thank you for your cooperation.
import directory
import tutorials
import video
import xbmc
import xbmcgui
dialog = xbmcgui.Dialog()
HOME = xbmc.translatePath('special://home')
master_modes = {
# Required for certain koding functions to work
"play_video": {'function': video.Play_Video, 'args': ["url"]},
"show_tutorial": {'function': tutorials.Show_Tutorial, 'args': ["url"]},
"tutorials": {'function': tutorials.Grab_Tutorials, 'args': []},
}
#----------------------------------------------------------------
# TUTORIAL #
def route(mode, args=[]):
"""
Use this to set a function in your master_modes dictionary.
This is to be used for Add_Dir() items, see the example below.
CODE: route(mode, [args])
AVAILABLE PARAMS:
(*) mode - This must be set, it needs to be a custom string.
This is the string you'd use in your Add_Dir command to call
the function.
args - This is optional but if the function you're calling
requires extra paramaters you can add them in here. Just add them
as a list of strings. Example: args=['name','artwork','description']
BELOW IS AN EXAMPLE OF HOW TO CALL THE CODE IN YOUR MAIN ADDON PY FILE:
@route(mode="test", args=["name","description"])
def Test_Function(name,description):
dialog.ok('This is a test function', name, description')
koding.Add_Dir(name='Test Dialog', url={"name":"My Test Function", "description" : "Its ALIVE!!!"}, mode='test')
koding.run()
~"""
if mode not in master_modes:
def _route(function):
master_modes[mode] = {
'function': function,
'args': args
}
return function
return _route
else:
dialog.ok('DUPLICATE MODE',
'The following mode already exists:',
'[COLOR=dodgerblue]%s[/COLOR]' % mode)
#----------------------------------------------------------------
# TUTORIAL #
def Run(default="main"):
"""
This needs to be called at the bottom of your code in the main default.py
This checks the modes called in Add_Dir and does all the clever stuff
in the background which assigns those modes to functions and sends
through the various params.
Just after this command you need to make
sure you set the endOfDirectory (as shown below).
CODE: run([default])
xbmcplugin.endOfDirectory(int(sys.argv[1]))
AVAILABLE PARAMS:
default - This is the default mode you want the add-on to open
into, it's set as "main" by default. If you have a different mode
name you want to open into just edit accordingly.
~"""
import urllib
import urlparse
import sys
from __init__ import DEBUG
from guitools import Text_Box
from systemtools import Last_Error
params = dict(urlparse.parse_qsl(sys.argv[2].replace('?', '')))
mode = params.get("mode", default)
if mode in master_modes:
evaled_args = []
# Grab the url and split up into a dictionary of args
try:
main_url = params["url"]
# Convert back from special to physical path - useful for community shares
if urllib.unquote_plus("special://home/") in main_url:
main_url = main_url.replace('special://home/',HOME)
except:
main_url = ''
try:
my_args = eval(main_url)
except:
my_args = {"url":main_url}
for arg in master_modes[mode]["args"]:
try:
evaled_args.append(my_args[arg])
except:
if DEBUG == 'true':
dialog.ok('ERROR IN CODE','Your Add_Dir function is expecting the [COLOR=gold][B]%s[/B][/COLOR] paramater to be sent through. This does not exist, please check your Add_Dir function.'%arg)
xbmc.log(Last_Error(),2)
return
try:
master_modes[mode]["function"](*evaled_args)
except:
if DEBUG == 'true':
Text_Box('ERROR IN CODE', Last_Error())
xbmc.log(Last_Error(),2)
else:
pass
else:
dialog.ok('MODE DOES NOT EXIST',
'The following mode does not exist in your\
master_modes dictionary:',
'[COLOR=dodgerblue]%s[/COLOR]' % mode)