September 2018 Update
Added - Koding AIO to repo as addons depend on it Updated - DefCon now has 2018 talks in
This commit is contained in:
140
script.module.python.koding.aio/lib/koding/router.py
Normal file
140
script.module.python.koding.aio/lib/koding/router.py
Normal file
@@ -0,0 +1,140 @@
|
||||
# -*- 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)
|
||||
Reference in New Issue
Block a user