#!/usr/bin/python #
# -*- coding: utf-8 -*- #
#############################=IMPORTS=######################################
#Kodi Specific
import xbmc,xbmcaddon,xbmcgui,xbmcplugin,xbmcvfs
#Python Specific
import base64,os,re,time,sys,urllib.request
import urllib.parse,urllib.error,json,datetime,shutil
import xml.dom.minidom
from xml.dom.minidom import Node
from datetime import datetime,timedelta
#Addon Specific
from resources.modules import control,tools,popup,speedtest
##########################=VARIABLES=#######################################
ADDON = xbmcaddon.Addon()
ADDONPATH = ADDON.getAddonInfo("path")
ADDON_NAME = ADDON.getAddonInfo("name")
ADDON_ID = ADDON.getAddonInfo('id')
DIALOG = xbmcgui.Dialog()
DP = xbmcgui.DialogProgress()
HOME = xbmcvfs.translatePath('special://home/')
ADDONS = os.path.join(HOME, 'addons')
USERDATA = os.path.join(HOME, 'userdata')
PLUGIN = os.path.join(ADDONS, ADDON_ID)
PACKAGES = os.path.join(ADDONS, 'packages')
ADDONDATA = os.path.join(USERDATA, 'addon_data', ADDON_ID)
ADVANCED = os.path.join(USERDATA, 'advancedsettings.xml')
advanced_settings = os.path.join(PLUGIN,'resources', 'advanced_settings')
MEDIA = os.path.join(ADDONS, PLUGIN , 'resources', 'media')
KODIV = float(xbmc.getInfoLabel("System.BuildVersion")[:4])
M3U_PATH = os.path.join(ADDONDATA, 'm3u.m3u')
##########################=ART PATHS=#######################################
icon = os.path.join(PLUGIN, 'icon.png')
fanart = os.path.join(PLUGIN, 'fanart.jpg')
background = os.path.join(MEDIA, 'background.jpg')
live = os.path.join(MEDIA, 'live.jpg')
catch = os.path.join(MEDIA, 'cu.jpg')
Moviesod = os.path.join(MEDIA, 'movie.jpg')
Tvseries = os.path.join(MEDIA, 'tv.jpg')
iconextras = os.path.join(MEDIA, 'iconextras.png')
iconsettings = os.path.join(MEDIA, 'iconsettings.png')
iconlive = os.path.join(MEDIA, 'iconlive.png')
iconcatchup = os.path.join(MEDIA, 'iconcatchup.png')
iconMoviesod = os.path.join(MEDIA, 'iconmovies.png')
iconTvseries = os.path.join(MEDIA, 'icontvseries.png')
iconsearch = os.path.join(MEDIA, 'iconsearch.png')
iconaccount = os.path.join(MEDIA, 'iconaccount.png')
icontvguide = os.path.join(MEDIA, 'iconguide.png')
#########################=XC VARIABLES=#####################################
dns = control.setting('DNS')
username = control.setting('Username')
password = control.setting('Password')
live_url = '{0}/enigma2.php?username={1}&password={2}&type=get_live_categories'.format(dns,username,password)
vod_url = '{0}/enigma2.php?username={1}&password={2}&type=get_vod_categories'.format(dns,username,password)
series_url = '{0}/enigma2.php?username={1}&password={2}&type=get_series_categories'.format(dns,username,password)
panel_api = '{0}/panel_api.php?username={1}&password={2}'.format(dns,username,password)
player_api = '{0}/player_api.php?username={1}&password={2}'.format(dns,username,password)
play_url = '{0}/live/{1}/{2}/'.format(dns,username,password)
play_live = '{0}/{1}/{2}/'.format(dns,username,password)
play_movies = '{0}/movie/{1}/{2}/'.format(dns,username,password)
play_series = '{0}/series/{1}/{2}/'.format(dns,username,password)
#############################################################################
adult_tags = ['xxx','xXx','XXX','adult','Adult','ADULT','adults','Adults','ADULTS','porn','Porn','PORN']
def buildcleanurl(url):
url = str(url).replace('USERNAME',username).replace('PASSWORD',password)
return url
def start(signin):
if username == "":
dns = tools.keypopup('Enter DNS')
usern = tools.keypopup('Enter Username')
passw = tools.keypopup('Enter Password')
control.setSetting('DNS',dns)
control.setSetting('Username',usern)
control.setSetting('Password',passw)
xbmc.executebuiltin('Container.Refresh')
auth_url = '{0}/player_api.php?username={1}&password={2}'.format(dns,usern,passw)
response = tools.OPEN_URL(auth_url)
parse = json.loads(response)
login_data = parse['user_info']['auth']
if login_data == 0:
line1 = "Incorrect Login Details"
line2 = "Please Re-enter"
line3 = ""
xbmcgui.Dialog().ok('Attention', line1+'\n'+line2+'\n'+line3)
start()
else:
line1 = "Login Sucsessfull"
line2 = "Welcome to "+ADDON_NAME
line3 = ('[B][COLOR white]%s[/COLOR][/B]'%usern)
xbmcgui.Dialog().ok(ADDON_NAME, line1+'\n' + line2 +'\n' + line3)
adult_set()
#tvguidesetup()
addonsettings('ADS2','')
xbmc.executebuiltin('Container.Refresh')
home()
else:
home()
def home():
tools.addDir('Account Information','url',6,iconaccount,background,'')
tools.addDir('Live TV','live',1,iconlive,background,'')
tools.addDir('TV Series','live',18,iconTvseries,background,'')
if xbmc.getCondVisibility('System.HasAddon(pvr.iptvsimple)'):
tools.addDir('TV Guide','pvr',7,icontvguide,background,'')
tools.addDir('Catchup TV','url',12,iconcatchup,background,'')
tools.addDir('Video On Demand','vod',3,iconMoviesod,background,'')
tools.addDir('Search','url',5,iconsearch,background,'')
tools.addDir('Settings','url',8,iconsettings,background,'')
tools.addDir('Extras','url',16,iconextras,background,'')
def livecategory():
open = tools.OPEN_URL(live_url)
i = 0
doc = xml.dom.minidom.parseString(open)
for topic in doc.getElementsByTagName('channel'):
name= tools.b64(doc.getElementsByTagName('title')[i].firstChild.nodeValue)
url2 = tools.check_protocol(doc.getElementsByTagName('playlist_url')[i].firstChild.nodeValue).replace('','')
if xbmcaddon.Addon().getSetting('hidexxx')=='false':
tools.addDir('%s'%name,url2,2,icon,live,'')
else:
if not any(s in name for s in adult_tags):
tools.addDir('%s'%name,url2,2,icon,background,'')
i +=1
def Livelist(url):
url = buildcleanurl(url)
open = tools.OPEN_URL(url)
i = 0
doc = xml.dom.minidom.parseString(open)
for topic in doc.getElementsByTagName('channel'):
name = re.sub('\[.*?min ','-',tools.b64(doc.getElementsByTagName('title')[i].firstChild.nodeValue))
url1 = tools.check_protocol(doc.getElementsByTagName('stream_url')[i].firstChild.nodeValue).replace('','')
try:
thumb = (doc.getElementsByTagName('desc_image')[i].firstChild.nodeValue).replace('','')
desc = tools.b64(doc.getElementsByTagName('description')[i].firstChild.nodeValue)
except:
thumb = live
desc = 'No Info Available'
if xbmcaddon.Addon().getSetting('hidexxx')=='false':
tools.addDir('%s'%name,url1,4,thumb,background,desc)
else:
if not any(s in name for s in adult_tags):
tools.addDir('%s'%name,url1,4,thumb,background,desc)
i +=1
def series_cats(url):
open = tools.OPEN_URL(player_api+'&action=get_series_categories')
parse = json.loads(open)
vod_cat = parse
for cat in vod_cat:
if xbmcaddon.Addon().getSetting('hidexxx')=='false':
tools.addDir(cat['category_name'],player_api+'&action=get_series&category_id='+cat['category_id'],25,icon,background,'')
else:
if not any(s in name for s in adult_tags):
tools.addDir(cat['category_name'],player_api+'&action=get_series&category_id='+cat['category_id'],25,icon,background,'')
def serieslist(url):
open = tools.OPEN_URL(url)
ser_cat = json.loads(open)
for ser in ser_cat:
name = ser['name']
url = player_api+'&action=get_series_info&series_id='+str(ser['series_id'])
try:
thumb = ser['cover']
background = ser['backdrop_path'][0]
plot = ser['plot']
releaseDate = ser['releaseDate']
cast = str(ser['cast']).split()
rating_5based = ser['rating_5based']
episode_run_time = str(ser['episode_run_time'])
genre = ser['genre']
except:
thumb = icon
plot = ''
releasedate = ''
cast = ('', '')
rating_5based = ''
episode_run_time = ''
genre = ''
if xbmcaddon.Addon().getSetting('meta') == 'true':
tools.addDirMeta(name,url,19,thumb,background,plot,releaseDate,cast,rating_5based,episode_run_time,genre)
else:
#tools.log('[FTG]--')
tools.addDir(name,url,19,thumb,background,'')
def series_seasons(url):
open = tools.OPEN_URL(url)
ser_cat = json.loads(open)
for ser in ser_cat['episodes']:
info = ser_cat['info']
try:
thumb = info['cover']
except:
thumb = ''
try:
background = info['backdrop_path'][0]
except:
background = ''
tools.addDir('Season - '+ser,url+'&season_number='+str(ser),20,thumb,background,'')
def season_list(url):
tools.log(url)
open = tools.OPEN_URL(url)
ser_cat = json.loads(open)
info = ser_cat['info']
ser_cat = ser_cat['episodes']
from urllib.parse import urlparse, parse_qs
parsed_url = urlparse(url)
season_number = str(parse_qs(parsed_url.query)['season_number'][0])
for ser in ser_cat[season_number]:
url = play_series+str(ser['id'])+'.'+ser['container_extension']
try:
thumb = ser['info']['movie_image']
except:
thumb = ''
try:
background = ser['info']['movie_image']
except:
background = ''
try:
plot = ser['info']['plot']
except:
plot = ''
try:
releasedate = ser['info']['releasedate']
except:
releasedate = ''
try:
cast = str(info['cast']).split()
except:
cast = ('', '')
try:
rating_5based = info['rating_5based']
except:
rating_5based = ''
try:
duration = str(ser['info']['duration'])
except:
duration = ''
try:
genre = info['genre']
except:
genre = ''
if xbmcaddon.Addon().getSetting('meta') == 'true':
tools.log(cast)
tools.addDirMeta(ser['title'],url,4,thumb,background,plot,releasedate,cast,rating_5based,duration,genre)
else:
tools.addDir(ser['title'],url,4,thumb,background,'')
def vod(url):
if url =="vod":
open = tools.OPEN_URL(vod_url)
else:
url = buildcleanurl(url)
open = tools.OPEN_URL(url)
all_cats = tools.regex_get_all(open,'','')
for a in all_cats:
if '' in open:
name = str(tools.b64(tools.regex_from_to(a,'',''))).replace('?','')
url1 = tools.check_protocol(tools.regex_from_to(a,'','').replace('',''))
if xbmcaddon.Addon().getSetting('hidexxx')=='false':
tools.addDir(name,url1,3,icon,background,'')
else:
if not any(s in name for s in adult_tags):
tools.addDir(name,url1,3,icon,background,'')
else:
if xbmcaddon.Addon().getSetting('meta') == 'true':
try:
name = tools.b64(tools.regex_from_to(a,'',''))
thumb= tools.regex_from_to(a,'','').replace('','')
url = tools.check_protocol(tools.regex_from_to(a,'','').replace('',''))
desc = tools.b64(tools.regex_from_to(a,'',''))
plot = tools.regex_from_to(desc,'PLOT:','\n')
try:
cast = tools.regex_from_to(desc,'CAST:','\n')
except:
cast = ('', '')
ratin= tools.regex_from_to(desc,'RATING:','\n')
year = tools.regex_from_to(desc,'RELEASEDATE:','\n').replace(' ','-')
year = re.compile('-.*?-.*?-(.*?)-',re.DOTALL).findall(year)
runt = tools.regex_from_to(desc,'DURATION_SECS:','\n')
genre= tools.regex_from_to(desc,'GENRE:','\n')
tools.addDirMeta(str(name).replace('[/COLOR][/B].','.[/COLOR][/B]'),url,4,thumb,background,plot,str(year).replace("['","").replace("']",""),str(cast).split(),ratin,runt,genre)
except:pass
xbmcplugin.setContent(int(sys.argv[1]), 'vod')
else:
name = tools.b64(tools.regex_from_to(a,'',''))
thumb= tools.regex_from_to(a,'','').replace('','')
url = tools.check_protocol(tools.regex_from_to(a,'','').replace('',''))
desc = tools.b64(tools.regex_from_to(a,'',''))
tools.addDir(name,url,4,thumb,background,desc)
def search():
if mode==3:
return False
text = searchdialog()
xbmc.log(str(text))
open = tools.OPEN_URL(panel_api)
parse = json.loads(open)
all_chans = tools.regex_get_all(open,'{"num":','}')
for a in all_chans:
name = tools.regex_from_to(a,'name":"','"')
url = tools.regex_from_to(a,'"stream_id":"','"')
thumb= tools.regex_from_to(a,'stream_icon":"','"').replace('\/','/')
stream_type = tools.regex_from_to(a,'"stream_type":"','"').replace('\/','/')
container_extension = tools.regex_from_to(a,'container_extension":"','"')
if text in name.lower():
if xbmcaddon.Addon().getSetting('hidexxx')=='false':
if 'movie' in stream_type:
tools.addDir(name,play_movies+url+'.'+container_extension,4,thumb,background,'')
if 'live' in stream_type:
tools.addDir(name,play_live+url,4,thumb,background,'')
else:
if not any(s in name for s in adult_tags):
if 'movie' in stream_type:
tools.addDir(name,play_movies+url+'.'+container_extension,4,thumb,background,'')
if 'live' in stream_type:
tools.addDir(name,play_live+url,4,thumb,background,'')
elif text not in name.lower() and text in name:
if xbmcaddon.Addon().getSetting('hidexxx')=='false':
if 'movie' in stream_type:
tools.addDir(name,play_movies+url+'.'+container_extension,4,thumb,background,'')
if 'live' in stream_type:
tools.addDir(name,play_live+url,4,thumb,background,'')
else:
if not any(s in name for s in adult_tags):
if 'movie' in stream_type:
tools.addDir(name,play_movies+url+'.'+container_extension,4,thumb,background,'')
if 'live' in stream_type:
tools.addDir(name,play_live+url,4,thumb,background,'')
def catchup():
open = tools.OPEN_URL(panel_api+'&action=get_live_streams')
data = json.loads(open)
for streams in data:
if not streams['tv_archive']:
continue
try:
thumb = streams['stream_icon']
except:
thumb = iconcatchup
name = streams['name']
stream_id = str(streams['stream_id'])
if not name=="":
tools.addDir(name,'url',13,thumb,background,stream_id)
def tvarchive(name,description):
APIv2 = "{0}/player_api.php?username={1}&password={2}&action=get_simple_data_table&stream_id={3}".format(dns,username,password,description)
link = tools.OPEN_URL(APIv2)
data = json.loads(link)
for streams in data['epg_listings']:
if not streams['has_archive']:
continue
if not streams['start']:
continue
name = base64.b64decode(streams['title']).decode('UTF-8')
stream_id = streams['id']
plot = base64.b64decode(streams['description']).decode('UTF-8')
start = streams['start']
end = streams['end']
format = '%Y-%m-%d %H:%M:%S'
start_obj = datetime(*(time.strptime(start, format)[0:6]))
end_obj = datetime(*(time.strptime(end, format)[0:6]))
start_api_obj = start_obj.strftime('%Y-%m-%d:%H-%M')
end_api_obj = end_obj.strftime('%Y-%m-%d:%H-%M')
difference = end_obj - start_obj
duration = difference.total_seconds()
duration = round(duration / 60)
start2 = start[:-3]
editstart = start2
start2 = str(start2).replace(' ',' - ')
catchupURL = "{0}/streaming/timeshift.php?username={1}&password={2}&stream={3}&start=".format(dns,username,password,description)
ResultURL = catchupURL + str(start_api_obj) + "&duration={0}".format(duration)
Fname = "[B][COLOR white]{0}[/COLOR][/B] - {1}".format(start2,name)
tools.addDir(Fname,ResultURL,4,iconcatchup,background,plot)
#############################
def tvguide():
xbmc.executebuiltin('ActivateWindow(TVGuide)')
def stream_video(url):
url = buildcleanurl(url)
liz = xbmcgui.ListItem('')
liz.setArt({'icon':icon, 'thumb':icon})
liz.setInfo(type='Video', infoLabels={'Title': '', 'Plot': ''})
liz.setProperty('IsPlayable','true')
liz.setPath(str(url))
xbmcplugin.setResolvedUrl(int(sys.argv[1]), True, liz)
def searchdialog():
search = control.inputDialog(heading='Search '+ADDON_NAME+':')
if search=="":
return
else:
return search
def settingsmenu():
if xbmcaddon.Addon().getSetting('meta')=='true':
META = '[B][COLOR lime]ON[/COLOR][/B]'
else:
META = '[B][COLOR red]OFF[/COLOR][/B]'
if xbmcaddon.Addon().getSetting('hidexxx')=='true':
xxx = '[B][COLOR lime]ON[/COLOR][/B]'
else:
xxx = '[B][COLOR red]OFF[/COLOR][/B]'
tools.addDir('Edit Advanced Settings','ADS',10,icon,background,'')
tools.addDir('META is %s'%META,'META',10,icon,background,META)
tools.addDir('Hide Adult Content is %s'%xxx,'XXX',10,icon,background,xxx)
tools.addDir('Log Out','LO',10,icon,background,'')
def addonsettings(url,description):
url = buildcleanurl(url)
if url =="clearcache":
tools.clear_cache()
elif url =="AS":
xbmc.executebuiltin('Addon.OpenSettings(%s)'% ADDON_ID)
elif url =="ADS":
dialog = xbmcgui.Dialog().select('Edit Advanced Settings', ['Open AutoConfig','Enable Fire TV Stick AS','Enable Fire TV AS','Enable 1GB Ram or Lower AS','Enable 2GB Ram or Higher AS','Enable Nvidia Shield AS','Disable AS'])
if dialog==0:
advancedsettings('auto')
elif dialog==1:
advancedsettings('stick')
tools.ASln()
elif dialog==2:
advancedsettings('firetv')
tools.ASln()
elif dialog==3:
advancedsettings('lessthan')
tools.ASln()
elif dialog==4:
advancedsettings('morethan')
tools.ASln()
elif dialog==5:
advancedsettings('shield')
tools.ASln()
elif dialog==6:
advancedsettings('remove')
xbmcgui.Dialog().ok(ADDON_NAME, 'Advanced Settings Removed')
elif url =="ADS2":
dialog = xbmcgui.Dialog().select('Select Your Device Or Closest To', ['Open AutoConfig','Fire TV Stick ','Fire TV','1GB Ram or Lower','2GB Ram or Higher','Nvidia Shield'])
if dialog==0:
advancedsettings('auto')
tools.ASln()
elif dialog==1:
advancedsettings('stick')
tools.ASln()
elif dialog==2:
advancedsettings('firetv')
tools.ASln()
elif dialog==3:
advancedsettings('lessthan')
tools.ASln()
elif dialog==4:
advancedsettings('morethan')
tools.ASln()
elif dialog==5:
advancedsettings('shield')
tools.ASln()
elif url =="tv":
dialog = xbmcgui.Dialog().yesno(ADDON_NAME,'Would You like us to Setup the TV Guide for You?')
if dialog:
pvrsetup()
xbmcgui.Dialog().ok(ADDON_NAME, 'PVR Integration Complete, Restart Kodi For Changes To Take Effect')
elif url =="Itv":
xbmc.executebuiltin('InstallAddon(pvr.iptvsimple)')
elif url =="ST":
speedtest.speedtest()
elif url =="META":
if 'ON' in description:
xbmcaddon.Addon().setSetting('meta','false')
xbmc.executebuiltin('Container.Refresh')
else:
xbmcaddon.Addon().setSetting('meta','true')
xbmc.executebuiltin('Container.Refresh')
elif url =="XXX":
if 'ON' in description:
pas = tools.keypopup('Enter Adult Password:')
if pas ==control.setting('xxx_pw'):
xbmcaddon.Addon().setSetting('hidexxx','false')
xbmc.executebuiltin('Container.Refresh')
else:
xbmcaddon.Addon().setSetting('hidexxx','true')
xbmc.executebuiltin('Container.Refresh')
elif url =="LO":
xbmcaddon.Addon().setSetting('DNS','')
xbmcaddon.Addon().setSetting('Username','')
xbmcaddon.Addon().setSetting('Password','')
xbmc.executebuiltin('XBMC.ActivateWindow(Videos,addons://sources/video/)')
xbmc.executebuiltin('Container.Refresh')
elif url =="UPDATE":
if 'ON' in description:
xbmcaddon.Addon().setSetting('update','false')
xbmc.executebuiltin('Container.Refresh')
else:
xbmcaddon.Addon().setSetting('update','true')
xbmc.executebuiltin('Container.Refresh')
elif url == "RefM3U":
DP.create(ADDON_NAME, "Please Wait")
tools.gen_m3u(panel_api, M3U_PATH)
elif url == "TEST":
tester()
def adult_set():
dialog = DIALOG.yesno(ADDON_NAME,'Would you like to hide the Adult Menu? \nYou can always change this in settings later on.')
if dialog:
control.setSetting('xxx_pwset','true')
pass
else:
control.setSetting('xxx_pwset','false')
pass
dialog = DIALOG.yesno(ADDON_NAME,'Would you like to Password Protect Adult Content? \nYou can always change this in settings later on.')
if dialog:
control.setSetting('xxx_pwset','true')
adultpw = tools.keypopup('Enter Password')
control.setSetting('xxx_pw',adultpw)
else:
control.setSetting('xxx_pwset','false')
pass
def advancedsettings(device):
if device == 'stick':
file = open(os.path.join(advanced_settings, 'stick.xml'))
elif device =='auto':
popup.autoConfigQ()
elif device == 'firetv':
file = open(os.path.join(advanced_settings, 'firetv.xml'))
elif device == 'lessthan':
file = open(os.path.join(advanced_settings, 'lessthan1GB.xml'))
elif device == 'morethan':
file = open(os.path.join(advanced_settings, 'morethan1GB.xml'))
elif device == 'shield':
file = open(os.path.join(advanced_settings, 'shield.xml'))
elif device == 'remove':
os.remove(ADVANCED)
try:
read = file.read()
f = open(ADVANCED, mode='w+')
f.write(read)
f.close()
except:
pass
def accountinfo():
response = tools.OPEN_URL(panel_api)
parse = json.loads(response)
expiry = parse['user_info']['exp_date']
if not expiry=="":
expiry = datetime.fromtimestamp(int(expiry)).strftime('%d/%m/%Y - %H:%M')
expreg = re.compile('^(.*?)/(.*?)/(.*?)$',re.DOTALL).findall(expiry)
for day,month,year in expreg:
month = tools.MonthNumToName(month)
year = re.sub(' -.*?$','',year)
expiry = month+' '+day+' - '+year
else:
expiry = 'Unlimited'
tools.addDir('[B][COLOR white]Username :[/COLOR][/B] '+parse['user_info']['username'],'','',icon,background,'')
tools.addDir('[B][COLOR white]Password :[/COLOR][/B] '+parse['user_info']['password'],'','',icon,background,'')
tools.addDir('[B][COLOR white]Expiry Date:[/COLOR][/B] '+expiry,'','',icon,background,'')
tools.addDir('[B][COLOR white]Account Status :[/COLOR][/B] %s'% parse['user_info']['status'],'','',icon,background,'')
tools.addDir('[B][COLOR white]Current Connections:[/COLOR][/B] '+ parse['user_info']['active_cons'],'','',icon,background,'')
tools.addDir('[B][COLOR white]Allowed Connections:[/COLOR][/B] '+ parse['user_info']['max_connections'],'','',icon,background,'')
tools.addDir('[B][COLOR white]Local IP Address:[/COLOR][/B] '+ tools.getlocalip(),'','',icon,background,'')
tools.addDir('[B][COLOR white]External IP Address:[/COLOR][/B] '+ tools.getexternalip(),'','',icon,background,'')
tools.addDir('[B][COLOR white]Kodi Version:[/COLOR][/B] '+str(KODIV),'','',icon,background,'')
def waitasec(time_to_wait,title,text):
FTGcd = xbmcgui.DialogProgress()
ret = FTGcd.create(' '+title)
secs=0
percent=0
increment = int(100 / time_to_wait)
cancelled = False
while secs < time_to_wait:
secs += 1
percent = increment*secs
secs_left = str((time_to_wait - secs))
remaining_display = "Still " + str(secs_left) + "seconds left"
FTGcd.update(percent,text+'\n'+remaining_display)
xbmc.sleep(1000)
if (FTGcd.iscanceled()):
cancelled = True
break
if cancelled == True:
return False
else:
FTGcd.close()
return False
def tester():
FTG = ''
def pvrsetup():
correctPVR()
tools.killxbmc()
return
def correctPVR():
choice = DIALOG.yesno(ADDON_NAME, 'Does your provider allow M3U?')
if choice:
m3u_do = 'no'
else:
DP.create(ADDON_NAME, "Please Wait")
tools.gen_m3u(panel_api, M3U_PATH)
m3u_do = 'yes'
try:
addon = xbmcaddon.Addon(ADDON_ID)
dns_text = addon.getSetting(id='DNS')
username_text = addon.getSetting(id='Username')
password_text = addon.getSetting(id='Password')
PvrEnable = '{"jsonrpc":"2.0","method":"Addons.SetAddonEnabled","params":{"addonid":"pvr.demo","enabled":false},"id":1}'
jsonSetPVR = '{"jsonrpc":"2.0", "method":"Settings.SetSettingValue", "params":{"setting":"pvrmanager.enabled", "value":true},"id":1}'
IPTVon = '{"jsonrpc":"2.0","method":"Addons.SetAddonEnabled","params":{"addonid":"pvr.iptvsimple","enabled":true},"id":1}'
nulldemo = '{"jsonrpc":"2.0","method":"Addons.SetAddonEnabled","params":{"addonid":"pvr.demo","enabled":false},"id":1}'
loginurl = dns_text+"/get.php?username=" + username_text + "&password=" + password_text + "&type=m3u_plus&output=ts"
EPGurl = dns_text+"/xmltv.php?username=" + username_text + "&password=" + password_text
xbmc.executeJSONRPC(PvrEnable)
xbmc.executeJSONRPC(jsonSetPVR)
xbmc.executeJSONRPC(IPTVon)
xbmc.executeJSONRPC(nulldemo)
FTG = xbmcaddon.Addon('pvr.iptvsimple')
if m3u_do == 'yes':
FTG.setSetting(id='m3uPath', value=M3U_PATH)
FTG.setSetting(id='m3uPathType', value="0")
else:
FTG.setSetting(id='m3uUrl', value=loginurl)
FTG.setSetting(id='epgUrl', value=EPGurl)
FTG.setSetting(id='m3uCache', value="false")
FTG.setSetting(id='epgCache', value="false")
xbmc.executebuiltin("Container.Refresh")
DIALOG.ok(ADDON_NAME,"PVR Client Updated, Kodi needs to re-launch for changes to take effect, click ok to quit kodi and then please re launch")
os._exit(1)
except:
DIALOG.ok(ADDON_NAME,"PVR Client: Unknown Error or PVR already Set-Up")
def tvguidesetup():
dialog = DIALOG.yesno(ADDON_NAME,'Would You like '+ADDON_NAME+' to Setup the TV Guide for You?')
if dialog:
pvrsetup()
DIALOG.ok(ADDON_NAME, 'You are all done! \n Restart Kodi For Changes To Take Effect')
def num2day(num):
if num =="0":
day = 'monday'
elif num=="1":
day = 'tuesday'
elif num=="2":
day = 'wednesday'
elif num=="3":
day = 'thursday'
elif num=="4":
day = 'friday'
elif num=="5":
day = 'saturday'
elif num=="6":
day = 'sunday'
return day
def extras():
tools.addDir('Run a Speed Test','ST',10,icon,background,'')
try:
if xbmc.getCondVisibility('System.HasAddon(pvr.iptvsimple)'):
tools.addDir('Setup PVR Guide','tv',10,icon,background,'')
if not xbmc.getCondVisibility('System.HasAddon(pvr.iptvsimple)'):
tools.addDir('Install PVR Guide','Itv',10,icon,background,'')
if os.path.exists(M3U_PATH):
tools.addDir('Refresh M3U','RefM3U',10,icon,background,'')
except:pass
tools.addDir('Clear Cache','clearcache',10,icon,background,'')
#tools.addDir('Tester','TEST',10,icon,background,'')
params=tools.get_params()
url=None
name=None
mode=None
iconimage=None
description=None
query=None
type=None
try:
url=urllib.parse.unquote_plus(params["url"])
except:
pass
try:
name=urllib.parse.unquote_plus(params["name"])
except:
pass
try:
iconimage=urllib.parse.unquote_plus(params["iconimage"])
except:
pass
try:
mode=int(params["mode"])
except:
pass
try:
description=urllib.parse.unquote_plus(params["description"])
except:
pass
try:
query=urllib.parse.unquote_plus(params["query"])
except:
pass
try:
type=urllib.parse.unquote_plus(params["type"])
except:
pass
if mode==None or url==None or len(url)<1:
start('false')
elif mode==1:
livecategory()
elif mode==2:
Livelist(url)
elif mode==3:
vod(url)
elif mode==4:
stream_video(url)
elif mode==5:
search()
elif mode==6:
accountinfo()
elif mode==7:
tvguide()
elif mode==8:
settingsmenu()
elif mode==10:
addonsettings(url,description)
elif mode==11:
pvrsetup()
elif mode==12:
catchup()
elif mode==13:
tvarchive(name,description)
elif mode==14:
listcatchup2()
elif mode==15:
ivueint()
elif mode==16:
extras()
elif mode==18:
series_cats(url)
elif mode==25:
serieslist(url)
elif mode==19:
series_seasons(url)
elif mode==20:
season_list(url)
elif mode=='start':
start(signin)
elif mode=='test':
tester()
xbmcplugin.endOfDirectory(int(sys.argv[1]))