141 lines
5.1 KiB
Python
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)
|