def onAction(self, action):
        #see here https://github.com/xbmc/xbmc/blob/master/xbmc/guilib/Key.h for the full list

        actionId = action.getId()
        buttonId = action.getButtonCode()

        if actionId != 107:
            utils.Log('onAction actionID %d' % actionId)
            utils.Log('onAction buttonID %d' % buttonId)

        if actionId in [ACTION_CONTEXT, ACTION_RCLICK]:
            return self.onContextMenu()
            
        if actionId in [ACTION_PARENT_DIR, ACTION_BACK] or buttonId in [ESC]:
            return self.onBack()        

        try:    id = self.getFocus().getId()         
        except: id = 0

        select = (actionId == ACTION_SELECT) or (actionId == ACTION_LCLICK)

        if select and id == MAINLIST:   
            liz        = self.getSelectedItem()
            param      = liz.getProperty('Param')
            image      = liz.getProperty('Image')
            mode       = int(liz.getProperty('Mode'))
            isFolder   = liz.getProperty('IsFolder')   == 'true'
            isPlayable = liz.getProperty('IsPlayable') == 'true'

            if mode == LISTBACK:
                return self.onBack()

            if param:
                self.stopTimer()
                self.onParams(param, isFolder)
                self.resetTimer()

        if select and id == CATEGORIES:
            categoriesList = categories.getSetting('categories').split('|')
            if categoriesList[0] == '':
                categoriesList = []
               
            functionality.ShowCategories(categoriesList)

        if select and id == SETTINGS:
            if utils.isDSF():
                addonID = utils.dsf
            else:
                addonID = 'script.tvguidedixie'

            functionality.ShowSettings(addonID)

        
        if select and id == TOOLS:
            functionality.OpenTools()
        
        if select and id == TOOLS:
            functionality.OpenTools()
        
        if select and id == TVGUIDE:
            if xbmcgui.Window(10000).getProperty('VPNICITY_CONNECTED') == 'True':
                xbmc.executebuiltin('RunScript(special://home/addons/plugin.program.vpnicity/netkill.py,return)')
            xbmc.executebuiltin('RunScript(script.tvguidedixie)')
        

        if select and id == MOVIES:
            if utils.getSetting('KodiLib') == 'true':
                xbmc.executebuiltin('ActivateWindow(10501,plugin://plugin.video.genesis/?action=movieNavigator,return)')
            else:
                xbmc.executebuiltin('ActivateWindow(10025,videodb://1/2,return)')
        
        if select and id == TVSHOWS:
            if utils.getSetting('KodiLib') == 'true':
                xbmc.executebuiltin('ActivateWindow(10501,plugin://plugin.video.genesis/?action=tvNavigator,return)')
            else:
                xbmc.executebuiltin('ActivateWindow(10025,videodb://2/2,return)')
        
        if select and id == NETFLIX:
            xbmc.executebuiltin('RunScript(special://home/addons/plugin.program.vpnicity/netcon.py,return)')
        
        if select and id == MOVIEANDTV:
            xbmc.executebuiltin('XBMC.RunAddon(plugin.video.genesis)')
        
        if select and id == WORLDTV:
            xbmc.executebuiltin('XBMC.RunAddon(plugin.video.alluc.api)')
        
        if select and id == ANDROID:
            xbmc.executebuiltin('ActivateWindow(10025,androidapp://sources/apps,return)')
        
        if select and id == ADULT:
            xbmc.executebuiltin('ActivateWindow(10501,plugin://plugin.program.super.favourites/?label=Adult&mode=400&path=special://userdata/addon_data/plugin.program.super.favourites/Super Favourites/Adult/,return)')
        
        if select and id == VPN:
            xbmc.executebuiltin('RunScript(special://home/addons/plugin.program.vpnicity/manual.py,return)')

        if select and id == VIDEOWINDOW:   
            xbmc.executebuiltin('Action(fullscreen)')  
def checkUpdate():
    if utils.isDSF():
        import dsf
        try:    dsf.checkUpdate()
        except: pass
        return
    
    if not FIRSTRUN:
        BASEURL = utils.getBaseURL()
        utils.doBackup()
        utils.downloadDefaults(BASEURL)
        return

    response   = getResponse()
    ottskin    = response['OTTSkin']
    epgskin    = response['EPGSkin']
    logocolour = response['LogoColour']
    logowhite  = response['LogoWhite']
    ottupdate  = response['OTTUpdate']
    epgupdate  = response['EPGUpdate']


    curr = ottskin
    prev = utils.getSetting('OTTSKIN')

    if not prev == curr:
        url     = utils.getBaseURL() + response['OTT Skin Link']
        path    = xbmc.translatePath(PROFILE) 
        path    = os.path.join(path, 'skins')
        zipfile = os.path.join(path, 'skin-update.zip')
        
        if not sfile.exists(path):
            sfile.makedirs(path)
        
        utils.downloadSkins(url, path, zipfile)
        utils.setSetting('OTTSKIN', curr)


    curr = epgskin
    prev = utils.getSetting('EPGSKIN')

    if not prev == curr:
        url     = utils.getBaseURL() + response['EPG Skin Link']
        path    = os.path.join(extras, 'skins')
        zipfile = os.path.join(path,   'skin-update.zip')
        
        if not sfile.exists(path):
            sfile.makedirs(path)
        
        utils.downloadSkins(url, path, zipfile)
        utils.setSetting('EPGSKIN', curr)


    curr = logocolour
    prev = utils.getSetting('LOGOCOLOUR')

    if not prev == curr:
        url     = utils.getBaseURL() + response['Logo Colour']
        path    = os.path.join(logos, 'Colour Logo Pack')
        zipfile = os.path.join(path,  'logo-colour-update.zip')

        if not sfile.exists(path):
            sfile.makedirs(path)

        utils.downloadLogos(url, path, zipfile)
        utils.setSetting('LOGOCOLOUR', curr)


    curr = logowhite
    prev = utils.getSetting('LOGOWHITE')

    if not prev == curr:
        url     = utils.getBaseURL() + response['Logo White']
        path    = os.path.join(logos, 'White Logo Pack')
        zipfile = os.path.join(path,  'logo-white-update.zip')
        
        if not sfile.exists(path):
            sfile.makedirs(path)
        
        utils.downloadLogos(url, path, zipfile)
        utils.setSetting('LOGOWHITE', curr)


    curr = ottupdate
    prev = utils.getSetting('OTTUPDATE')

    if not prev == curr:
        url     = utils.getBaseURL() + response['OTT Update']
        path    = xbmc.translatePath(HOME)
        zipfile = os.path.join(path, 'python-update.zip')
        
        utils.doOTTUpdate(url, path, zipfile, ottupdate)
        utils.setSetting('OTTUPDATE', curr)


    curr = epgupdate
    prev = utils.getSetting('EPGUPDATE')

    if not prev == curr:
        url     = utils.getBaseURL() + response['EPG Update']
        path    = xbmc.translatePath(epghome)
        zipfile = os.path.join(path, 'python-update.zip')
        
        if not sfile.exists(path):
            sfile.makedirs(path)
        
        utils.doEPGUpdate(url, path, zipfile, epgupdate)
        utils.setSetting('EPGUPDATE', curr)
    return
TVSHOWS     = 3002
NETFLIX     = 3003
MOVIEANDTV  = 3004
WORLDTV     = 3005
ANDROID     = 3006
ADULT       = 3007
KID         = 3008
VIDEOWINDOW = 3010

LISTBACK  = -999

GETTEXT  = utils.GETTEXT
FRODO    = utils.FRODO
SKIN     = utils.getSetting('SKIN')
FIRSTRUN = utils.getSetting('FIRSTRUN') == 'true'
DSF      = utils.isDSF()


datapath    = utils.PROFILE
skinfolder  = os.path.join(datapath, 'skins')
skinpath    = os.path.join(skinfolder, SKIN)

PATH = skinpath

xml_file = os.path.join('main.xml')

os.path.join(SKIN, 'skins', 'Default', '720p', xml_file)
XML  = xml_file

class Application(xbmcgui.WindowXML):
    def __new__(cls, addonID):
def checkUpdate():
    if not FIRSTRUN:
        BASEURL = utils.getBaseURL()
        utils.DialogOK('Welcome to On-Tapp.TV 3.0', 'We will now do a back-up of any', 'existing files before installation.')
        utils.doBackup()
        
        if utils.isDSF():
            Addon.setSetting('dixie.skin', 'EPG-Skin')
            utils.setSetting('SKIN', 'OTT-Skin')
        
        utils.downloadDefaults(BASEURL)
    
    else:
        response   = getResponse()
        ottskin    = response['OTTSkin']
        epgskin    = response['EPGSkin']
        logocolour = response['LogoColour']
        logowhite  = response['LogoWhite']
        ottupdate  = response['OTTUpdate']
        epgupdate  = response['EPGUpdate']


        curr = ottskin
        prev = utils.getSetting('OTTSKIN')

        if not prev == curr:
            url     = utils.getBaseURL() + response['OTT Skin Link']
            path    = xbmc.translatePath(PROFILE) 
            path    = os.path.join(path, 'skins')
            zipfile = os.path.join(path, 'skin-update.zip')
            
            if not sfile.exists(path):
                sfile.makedirs(path)
            
            utils.downloadSkins(url, path, zipfile)
            utils.setSetting('OTTSKIN', curr)


        curr = epgskin
        prev = utils.getSetting('EPGSKIN')

        if not prev == curr:
            url     = utils.getBaseURL() + response['EPG Skin Link']
            path    = os.path.join(extras, 'skins')
            zipfile = os.path.join(path,   'skin-update.zip')
            
            if not sfile.exists(path):
                sfile.makedirs(path)
            
            utils.downloadSkins(url, path, zipfile)
            utils.setSetting('EPGSKIN', curr)

    
        curr = logocolour
        prev = utils.getSetting('LOGOCOLOUR')

        if not prev == curr:
            url     = utils.getBaseURL() + response['Logo Colour']
            path    = os.path.join(logos, 'Colour Logo Pack')
            zipfile = os.path.join(path,  'logo-colour-update.zip')
            
            if not sfile.exists(path):
                sfile.makedirs(path)
            
            utils.downloadLogos(url, path, zipfile)
            utils.setSetting('LOGOCOLOUR', curr)
    

        curr = logowhite
        prev = utils.getSetting('LOGOWHITE')

        if not prev == curr:
            url     = utils.getBaseURL() + response['Logo White']
            path    = os.path.join(logos, 'White Logo Pack')
            zipfile = os.path.join(path,  'logo-white-update.zip')
            
            if not sfile.exists(path):
                sfile.makedirs(path)
            
            utils.downloadLogos(url, path, zipfile)
            utils.setSetting('LOGOWHITE', curr)


        curr = ottupdate
        prev = utils.getSetting('OTTUPDATE')

        if not prev == curr:
            url     = utils.getBaseURL() + response['OTT Update']
            path    = xbmc.translatePath(HOME)
            zipfile = os.path.join(path, 'python-update.zip')
            
            utils.doOTTUpdate(url, path, zipfile, ottupdate)
            utils.setSetting('OTTUPDATE', curr)


        curr = epgupdate
        prev = utils.getSetting('EPGUPDATE')

        if not prev == curr:
            url     = utils.getBaseURL() + response['EPG Update']
            path    = xbmc.translatePath(epghome)
            zipfile = os.path.join(path, 'python-update.zip')
            
            if not sfile.exists(path):
                sfile.makedirs(path)
            
            utils.doEPGUpdate(url, path, zipfile, epgupdate)
            utils.setSetting('EPGUPDATE', curr)
def checkUpdate():
    if utils.isDSF():
        import dsf
        dsf.checkUpdate()
        return
    
    if not FIRSTRUN:
        BASEURL = utils.getBaseURL()
        utils.DialogOK('Welcome to On-Tapp.TV 3.0', 'We will now install some needed files.', 'This may take a few minutes, so please be patient.')
        utils.doBackup()
        utils.downloadDefaults(BASEURL)
        return
    
    response   = getResponse()
    ottskin    = response['OTTSkin']
    epgskin    = response['EPGSkin']
    logocolour = response['LogoColour']
    logowhite  = response['LogoWhite']
    ottupdate  = response['OTTUpdate']
    epgupdate  = response['EPGUpdate']


    curr = ottskin
    prev = utils.getSetting('OTTSKIN')

    if not prev == curr:
        url     = utils.getBaseURL() + response['OTT Skin Link']
        path    = xbmc.translatePath(PROFILE) 
        path    = os.path.join(path, 'skins')
        zipfile = os.path.join(path, 'skin-update.zip')
        
        if not sfile.exists(path):
            sfile.makedirs(path)
        
        utils.downloadSkins(url, path, zipfile)
        utils.setSetting('OTTSKIN', curr)


    curr = epgskin
    prev = utils.getSetting('EPGSKIN')

    if not prev == curr:
        url     = utils.getBaseURL() + response['EPG Skin Link']
        path    = os.path.join(extras, 'skins')
        zipfile = os.path.join(path,   'skin-update.zip')
        
        if not sfile.exists(path):
            sfile.makedirs(path)
        
        utils.downloadSkins(url, path, zipfile)
        utils.setSetting('EPGSKIN', curr)


    curr = logocolour
    prev = utils.getSetting('LOGOCOLOUR')

    if not prev == curr:
        url     = utils.getBaseURL() + response['Logo Colour']
        path    = os.path.join(logos, 'Colour Logo Pack')
        zipfile = os.path.join(path,  'logo-colour-update.zip')
        
        if not sfile.exists(path):
            sfile.makedirs(path)
        
        utils.downloadLogos(url, path, zipfile)
        utils.setSetting('LOGOCOLOUR', curr)


    curr = logowhite
    prev = utils.getSetting('LOGOWHITE')

    if not prev == curr:
        url     = utils.getBaseURL() + response['Logo White']
        path    = os.path.join(logos, 'White Logo Pack')
        zipfile = os.path.join(path,  'logo-white-update.zip')
        
        if not sfile.exists(path):
            sfile.makedirs(path)
        
        utils.downloadLogos(url, path, zipfile)
        utils.setSetting('LOGOWHITE', curr)


    curr = ottupdate
    prev = utils.getSetting('OTTUPDATE')

    if not prev == curr:
        url     = utils.getBaseURL() + response['OTT Update']
        path    = xbmc.translatePath(HOME)
        zipfile = os.path.join(path, 'python-update.zip')
        
        utils.doOTTUpdate(url, path, zipfile, ottupdate)
        utils.setSetting('OTTUPDATE', curr)


    curr = epgupdate
    prev = utils.getSetting('EPGUPDATE')

    if not prev == curr:
        url     = utils.getBaseURL() + response['EPG Update']
        path    = xbmc.translatePath(epghome)
        zipfile = os.path.join(path, 'python-update.zip')
        
        if not sfile.exists(path):
            sfile.makedirs(path)
        
        utils.doEPGUpdate(url, path, zipfile, epgupdate)
        utils.setSetting('EPGUPDATE', curr)
    return