Exemple #1
0
    def getSettings( self, id="repository.xbmc.builds" ):
        settings = {}
        try:
            from xbmcaddon import Addon
            addon = Addon( id )
            usetempdir = addon.getSetting( "usetempdir" ) == "true" 
            browsedir  = addon.getSetting( "browsedir" ) == "true" 
            settings[ "downloadpath" ] = ( addon.getSetting( "downloadpath" ), "" )[ browsedir ] 
            if not usetempdir:
                #browse for save dir
                if not settings[ "downloadpath" ] or not os.path.exists( settings[ "downloadpath" ] ):
                    dpath = xbmc.translatePath( self.get_browse_dialog( heading="Recordings folder" ) )
                    if dpath and os.path.exists( dpath ):
                        settings[ "downloadpath" ] = dpath
                        addon.setSetting( "downloadpath", settings[ "downloadpath" ] )
                    else:
                        settings[ "downloadpath" ] = ""
            settings[ "downloadinbackground" ] = addon.getSetting( "downloadinbackground" ) == "true"
            settings[ "reportpercent" ] = int( "0|5|10|20|25|50|100".split( "|" )[ int( addon.getSetting( "reportpercent" ) ) ] )

            PROFILE_PATH = xbmc.translatePath( addon.getAddonInfo( "profile" ) )
            settings[ "iddl_data" ] = os.path.join( PROFILE_PATH, "iddl_data" )
            if not os.path.exists( settings[ "iddl_data" ] ): os.makedirs( settings[ "iddl_data" ] )
        except:
            pass
        return settings
Exemple #2
0
    def getSettings(self, id="repository.xbmc.builds"):
        settings = {}
        try:
            from xbmcaddon import Addon
            addon = Addon(id)
            usetempdir = addon.getSetting("usetempdir") == "true"
            browsedir = addon.getSetting("browsedir") == "true"
            settings["downloadpath"] = (addon.getSetting("downloadpath"),
                                        "")[browsedir]
            if not usetempdir:
                #browse for save dir
                if not settings["downloadpath"] or not os.path.exists(
                        settings["downloadpath"]):
                    dpath = xbmc.translatePath(
                        self.get_browse_dialog(heading="Recordings folder"))
                    if dpath and os.path.exists(dpath):
                        settings["downloadpath"] = dpath
                        addon.setSetting("downloadpath",
                                         settings["downloadpath"])
                    else:
                        settings["downloadpath"] = ""
            settings["downloadinbackground"] = addon.getSetting(
                "downloadinbackground") == "true"
            settings["reportpercent"] = int(
                "0|5|10|20|25|50|100".split("|")[int(
                    addon.getSetting("reportpercent"))])

            PROFILE_PATH = xbmc.translatePath(addon.getAddonInfo("profile"))
            settings["iddl_data"] = os.path.join(PROFILE_PATH, "iddl_data")
            if not os.path.exists(settings["iddl_data"]):
                os.makedirs(settings["iddl_data"])
        except:
            pass
        return settings
def migrate_from_3_to_4(addon: xbmcaddon.Addon) -> int:

    RANGE_ONCE_TIMERS = 7

    TIMER_DAYS_PRESETS = [
        [],  # off
        [0],  # mon
        [1],  # tue
        [2],  # wed
        [3],  # thu
        [4],  # fri
        [5],  # sat
        [6],  # sun
        [0],  # mons
        [1],  # tues
        [2],  # weds
        [3],  # thus
        [4],  # fris
        [5],  # sats
        [6],  # suns
        [0, 1, 2, 3],  # mon-thu
        [0, 1, 2, 3, 4],  # mon-fri
        [0, 1, 2, 3, 4, 5],  # mon-sat
        [1, 2, 3, 4],  # tue-fri
        [3, 4, 5],  # thu-sat
        [4, 5],  # fri-sat
        [4, 5, 6],  # fri-sun
        [5, 6],  # sat-sun
        [5, 6, 0],  # sat-mon
        [6, 0, 1, 2],  # sun-wed
        [6, 0, 1, 2, 3],  # sun-thu
        [0, 1, 2, 3, 4, 5, 6]  # everyday
    ]

    xbmc.log("[script.timers] migrate settings to version 4", xbmc.LOGINFO)

    for i in range(TIMERS):

        # rename filename -> path
        path = addon.getSetting("timer_%i_filename" % i)
        addon.setSetting("timer_%i_path" % i, path)

        # days: enum -> multiselect
        schedule = int("0%s" % addon.getSetting("timer_%i" % i))
        if schedule > 0:
            days = "|".join([str(d) for d in TIMER_DAYS_PRESETS[schedule]])
            if days and schedule > RANGE_ONCE_TIMERS:
                days += "|7"

            addon.setSetting("timer_%i_days" % i, days)

        else:
            addon.setSetting("timer_%i_days" % i, "")

    return 4
Exemple #4
0
def getWeatherSettings( loc_index="1" ):
    try:
        location = Addon.getSetting( 'areacode%s' % loc_index )
        SetProperty( "Location", location )
        for i in range( 1, 4 ):
            SetProperty( "Location%i" % i, Addon.getSetting( "areacode%i" % i ) )
        SetProperty( "Locations", str( i ) )
        Addon.setSetting( 'currentlocation', loc_index )
    except:
        print_exc()
    return location, loc_index
Exemple #5
0
def getWeatherSettings(loc_index="1"):
    try:
        location = Addon.getSetting('areacode%s' % loc_index)
        SetProperty("Location", location)
        for i in range(1, 4):
            SetProperty("Location%i" % i, Addon.getSetting("areacode%i" % i))
        SetProperty("Locations", str(i))
        Addon.setSetting('currentlocation', loc_index)
    except:
        print_exc()
    return location, loc_index
Exemple #6
0
def compatibility():
    from xbmcaddon import Addon
    Addon = Addon( "weather.google" )
    # get old settings and if exists delete data xml 
    if Addon.getSetting( 'risingsun_city' ) or Addon.getSetting( 'risingsun1_city' ):
        icon = Addon.getAddonInfo( "icon" )
        xml  = Addon.getAddonInfo( 'profile' ) + 'settings.xml'
        del Addon
        import xbmcvfs
        xbmcvfs.delete( xml )
        if not xbmcvfs.exists( xml ):
            #notifie user
            xbmc.executebuiltin( "XBMC.Notification(Weather Google,Your settings have been renewed! Sorry!,10000,%s)" % icon )
Exemple #7
0
    def onInit( self ):
        self.getControl( 1 ).setLabel( "XBMC Intro Movie" )
        try:
            self.control_list = self.getControl( 6 )
            self.getControl( 5 ).setNavigation( self.control_list, self.control_list, self.control_list, self.control_list )
            self.getControl( 3 ).setEnabled( 0 )
            self.getControl( 3 ).setVisible( 0 )
        except:
            self.control_list = self.getControl( 3 )
            print_exc()

        try: self.getControl( 5 ).setLabel( "Cancel" )
        except: print_exc()

        intros_dir   = os.path.join( Addon.getAddonInfo( "path" ), "resources", "intros" )
        previews_dir = os.path.join( Addon.getAddonInfo( "path" ), "resources", "previews" )

        listitems = []
        cur = Addon.getSetting( "intro" )
        for intro in os.listdir( intros_dir ):
            name, ext = os.path.splitext( intro )
            listitem = xbmcgui.ListItem( intro, "", "DefaultVideo.png" )
            if cur == intro: listitem.setProperty( "Addon.Summary", "Current Intro" )
            preview = os.path.join( previews_dir, name + ".jpg" )
            if xbmcvfs.exists( preview ): listitem.setIconImage( preview )
            listitems.append( listitem )

        listitem = xbmcgui.ListItem( "Random", "", "DefaultAddonVisualization.png" )
        if cur == "Random": listitem.setProperty( "Addon.Summary", "Current Intro" )
        listitems.append( listitem )

        self.control_list.reset()
        self.control_list.addItems( listitems )
        self.setFocus( self.control_list )
Exemple #8
0
def Main( settingID=None ):
    setfocusid = 200
    if settingID == "use_intro_movie":
        xbmc.executebuiltin( "Skin.ToggleSetting(Use_Intro_Movie)" )
        xbmc.sleep( 100 )
        setting = ( "false", "true" )[ xbmc.getCondVisibility( "Skin.HasSetting(Use_Intro_Movie" ) ]
        Addon.setSetting( "use_intro_movie", setting )
        xbmc.sleep( 100 )
        setfocusid = ( 102, 103 )[ setting == "false" ]

    elif settingID == "splash":
        toggle = toggle_splash( Addon.getSetting( "splash" ) )
        Addon.setSetting( "splash", toggle )
        xbmc.sleep( 500 )
        setfocusid = ( 110, 111 )[ toggle == "false" ]

    elif settingID == "intro":
        w = DialogSelect( "DialogSelect.xml", Addon.getAddonInfo( "path" ) )
        w.doModal()
        del w
        setfocusid = 104

    xbmc.executebuiltin( "Addon.openSettings(script.xbmc.intro.movie)" )
    xbmc.executebuiltin( "SetFocus(200)" )
    xbmc.executebuiltin( "SetFocus(%i)" % setfocusid )
Exemple #9
0
def compatibility():
    from xbmcaddon import Addon
    Addon = Addon("weather.google")
    # get old settings and if exists delete data xml
    if Addon.getSetting('risingsun_city') or Addon.getSetting(
            'risingsun1_city'):
        icon = Addon.getAddonInfo("icon")
        xml = Addon.getAddonInfo('profile') + 'settings.xml'
        del Addon
        import xbmcvfs
        xbmcvfs.delete(xml)
        if not xbmcvfs.exists(xml):
            #notifie user
            xbmc.executebuiltin(
                "XBMC.Notification(Weather Google,Your settings have been renewed! Sorry!,10000,%s)"
                % icon)
Exemple #10
0
def SetProperties(loc_index=None):
    in_broad_daylight = True
    try:
        if loc_index is None:
            loc_index = Addon.getSetting("currentlocation")
        ID = Addon.getSetting("areacode%s_code" % loc_index)
        i_unit = int(Addon.getSetting("dist_unit"))

        sun = get_sun(ID, i_unit)
        in_broad_daylight = sun.get("In.Broad.Daylight") == "true"
        for key, value in sun.items():
            SetProperty(key, value)

        for key, value in get_moon(ID, i_unit).items():
            SetProperty(key, value)

        SetProperty("Weather.ExtraIsFetched", "true")
    except:
        print_exc()
    return in_broad_daylight
Exemple #11
0
    def _ia_cdm_path(cls):
        ''' Return the specified CDM path for inputstream.adaptive, usually ~/.kodi/cdm '''
        try:
            addon = Addon('inputstream.adaptive')
        except RuntimeError:
            return None
        cdm_path = translate_path(addon.getSetting('DECRYPTERPATH'))
        if not xbmcvfs.exists(cdm_path):
            xbmcvfs.mkdir(cdm_path)

        return cdm_path
Exemple #12
0
def SetProperties(loc_index=None):
    in_broad_daylight = True
    try:
        if loc_index is None:
            loc_index = Addon.getSetting('currentlocation')
        ID = Addon.getSetting('areacode%s_code' % loc_index)
        i_unit = int(Addon.getSetting("dist_unit"))

        sun = get_sun(ID, i_unit)
        in_broad_daylight = (sun.get("In.Broad.Daylight") == "true")
        for key, value in sun.items():
            SetProperty(key, value)

        for key, value in get_moon(ID, i_unit).items():
            SetProperty(key, value)

        SetProperty("Weather.ExtraIsFetched", "true")
    except:
        print_exc()
    return in_broad_daylight
Exemple #13
0
def service():
    from xml.dom.minidom import parseString
    has_splash = "true"
    dom = None
    try:
        dom = parseString( open( xbmc.translatePath( "special://userdata/advancedsettings.xml" ) ).read() )
        has_splash = dom.getElementsByTagName( "splash" )[ 0 ].firstChild.nodeValue
    except:
        print_exc()
    if dom: dom.unlink()
    if Addon.getSetting( "splash" ) != has_splash:
        Addon.setSetting( "splash", has_splash )
def migrate_from_2_to_3(addon: xbmcaddon.Addon) -> int:

    xbmc.log("[script.timers] migrate settings to version 3", xbmc.LOGINFO)

    def _migrate_action(timer, system_action: int, media_action: int) -> None:

        addon.setSetting("timer_%i_system_action" % timer, str(system_action))
        addon.setSetting("timer_%i_media_action" % timer, str(media_action))

    for i in range(TIMERS):

        # splitting media and system actions
        action = int("0%s" % addon.getSetting("timer_%i_action" % i))
        if action == 0:
            _migrate_action(i, 0, 0)

        elif action == 1:
            _migrate_action(i, 0, 1)

        elif action == 2:
            _migrate_action(i, 0, 2)

        elif action == 3:
            _migrate_action(i, 0, 3)

        elif action == 4:
            _migrate_action(i, 0, 5)

        elif action == 5:
            _migrate_action(i, 0, 6)

        elif action == 6:
            _migrate_action(i, 1, 0)

        elif action == 7:
            _migrate_action(i, 2, 0)

        elif action == 8:
            _migrate_action(i, 3, 0)

        elif action == 9:
            _migrate_action(i, 4, 0)

        elif action == 10:
            _migrate_action(i, 5, 0)

        else:
            xbmc.log(
                "[script.timers] Unknown action %s in former settings. Set no action at all."
                % str(action), xbmc.LOGWARNING)
            _migrate_action(i, 0, 0)

    return 3
def ia_cdm_path():
    """Return the specified CDM path for inputstream.adaptive, usually ~/.kodi/cdm"""
    from xbmcaddon import Addon
    try:
        addon = Addon('inputstream.adaptive')
    except RuntimeError:
        return None

    cdm_path = translate_path(to_unicode(addon.getSetting('DECRYPTERPATH')))
    if not exists(cdm_path):
        mkdirs(cdm_path)

    return cdm_path
Exemple #16
0
def _get_cdm_file_path():
    if common.get_system_platform() == 'linux':
        lib_filename = 'libwidevinecdm.so'
    elif common.get_system_platform() in ['windows', 'uwp']:
        lib_filename = 'widevinecdm.dll'
    elif common.get_system_platform() == 'osx':
        lib_filename = 'libwidevinecdm.dylib'
        # import ctypes.util
        # lib_filename = util.find_library('libwidevinecdm.dylib')
    else:
        lib_filename = None
    if not lib_filename:
        raise Exception(
            'Widevine library filename not mapped for this operative system')
    # Get the CDM path from inputstream.adaptive (such as: ../.kodi/cdm)
    from xbmcaddon import Addon
    addon = Addon('inputstream.adaptive')
    cdm_path = xbmcvfs.translatePath(addon.getSetting('DECRYPTERPATH'))
    if not common.folder_exists(cdm_path):
        raise Exception(f'The CDM path {cdm_path} not exists')
    return common.join_folders_paths(cdm_path, lib_filename)
Exemple #17
0
def fix_path( fixpath ):
    # fix path
    if fixpath.lower().startswith( "smb://" ) and IsTrue( Addon.getSetting( "smb_share" ) ):
        #remove share
        fixpath = fixpath.replace( "smb://", "" ).replace( "SMB://", "" )
        # add login and pass
        login = Addon.getSetting( "smb_login" )
        if login and not fixpath.startswith( login ):
            fixpath = "%s:%s@%s" % ( login, Addon.getSetting("smb_psw"), fixpath )
        fixpath = "smb://" + fixpath

    elif fixpath.lower().startswith( "ftp://" ) and IsTrue( Addon.getSetting( "ftp_share" ) ):
        #remove share
        fixpath = fixpath.replace( "ftp://", "" ).replace( "FTP://", "" )
        # add login and pass
        login = Addon.getSetting( "ftp_login" )
        if login and not fixpath.startswith( login ):
            fixpath = "%s:%s@%s" % ( login, Addon.getSetting("ftp_psw"), fixpath )
        fixpath = "ftp://" + fixpath

    return fixpath
Exemple #18
0
    DEVICE = "Linux"
elif xbmc.getCondVisibility('system.platform.android'):
    DEVICE = "Android"
else:
    DEVICE = "Unknown"

try:
    MODEL = platform.release() or 'Unknown'
except IOError:
    # E.g. iOS
    # It seems that Kodi doesn't allow python to spawn subprocesses in order to
    # determine the system name
    # See https://github.com/psf/requests/issues/4434
    MODEL = 'Unknown'

DEVICENAME = try_decode(_ADDON.getSetting('deviceName'))
if not DEVICENAME:
    DEVICENAME = try_decode(xbmc.getInfoLabel('System.FriendlyName'))
    _ADDON.setSetting('deviceName', DEVICENAME)
DEVICENAME = DEVICENAME.replace(":", "")
DEVICENAME = DEVICENAME.replace("/", "-")
DEVICENAME = DEVICENAME.replace("\\", "-")
DEVICENAME = DEVICENAME.replace("<", "")
DEVICENAME = DEVICENAME.replace(">", "")
DEVICENAME = DEVICENAME.replace("*", "")
DEVICENAME = DEVICENAME.replace("?", "")
DEVICENAME = DEVICENAME.replace('|', "")
DEVICENAME = DEVICENAME.replace('(', "")
DEVICENAME = DEVICENAME.replace(')', "")
DEVICENAME = DEVICENAME.replace(' ', "")
Exemple #19
0
elif xbmc.getCondVisibility('system.platform.atv2'):
    PLATFORM = "AppleTV2"
elif xbmc.getCondVisibility('system.platform.ios'):
    PLATFORM = "iOS"
elif xbmc.getCondVisibility('system.platform.windows'):
    PLATFORM = "Windows"
elif xbmc.getCondVisibility('system.platform.raspberrypi'):
    PLATFORM = "RaspberryPi"
elif xbmc.getCondVisibility('system.platform.linux'):
    PLATFORM = "Linux"
elif xbmc.getCondVisibility('system.platform.android'):
    PLATFORM = "Android"
else:
    PLATFORM = "Unknown"

DEVICENAME = tryDecode(_ADDON.getSetting('deviceName'))
DEVICENAME = DEVICENAME.replace(":", "")
DEVICENAME = DEVICENAME.replace("/", "-")
DEVICENAME = DEVICENAME.replace("\\", "-")
DEVICENAME = DEVICENAME.replace("<", "")
DEVICENAME = DEVICENAME.replace(">", "")
DEVICENAME = DEVICENAME.replace("*", "")
DEVICENAME = DEVICENAME.replace("?", "")
DEVICENAME = DEVICENAME.replace('|', "")
DEVICENAME = DEVICENAME.replace('(', "")
DEVICENAME = DEVICENAME.replace(')', "")
DEVICENAME = DEVICENAME.strip()

# Database paths
_DB_VIDEO_VERSION = {
    13: 78,   # Gotham
Exemple #20
0
Language = ADDON.getLocalizedString  # ADDON strings
LangXBMC = xbmc.getLocalizedString  # XBMC strings

# for more see [$SOURCE/xbmc/interfaces/json-rpc/ServiceDescription.h]
VIDEO_FIELDS_MOVIE = [
    "title", "genre", "year", "rating", "director", "trailer", "tagline",
    "plot", "plotoutline", "originaltitle", "lastplayed", "playcount",
    "writer", "studio", "mpaa", "cast", "country", "imdbnumber", "runtime",
    "set", "showlink", "streamdetails", "top250", "votes", "fanart",
    "thumbnail", "file", "sorttitle", "resume", "setid", "dateadded", "tag"
]
SORTTITLE = {"method": "sorttitle", "order": "ascending"}  #"descending"

# get user separator
try:
    separator = " %s " % ADDON.getSetting("separator")
except:
    separator = " / "
# get user prefer order
try:
    SORTTITLE["order"] = ("ascending",
                          "descending")[int(ADDON.getSetting("order"))]
except:
    pass


def time_took(t):
    return str(timedelta(seconds=(time.time() - t)))


def _encode(text, encoding="utf-8"):
Exemple #21
0
from xbmcaddon import Addon
from loggingexception import LoggingException
from BeautifulSoup import BeautifulSoup

pluginName = u'plugin.video.irishtv'
pluginHandle = int(sys.argv[1])
baseURL = sys.argv[0]

addon = Addon(pluginName)
language = addon.getLocalizedString

import mycgi

from httpmanager import HttpManager

dbg = addon.getSetting(u"debug") == u"true"
dbglevel = 3

from utils import log
from socket import setdefaulttimeout
from socket import getdefaulttimeout

import utils
import rtmp

import providerfactory
from provider import Provider

xhausUrl = "http://www.xhaus.com/headers"

# Use masterprofile rather profile, because we are caching data that may be used by more than one user on the machine
# -*- coding: utf-8 -*-
from xbmcaddon import Addon
from xbmc import translatePath
from os import mkdir
from os.path import join, exists
from datetime import timedelta
try:
    from resources.lib import strings
except ImportError:
    import strings

addon = Addon('plugin.program.super.favourites.xmltv')
DEBUG = True if addon.getSetting('debug.mode') == 'true' else False
''' ============================== '''
'''       Global addon infos       '''
''' ============================== '''


def checkMandatorySettings():

    # Checking xmltv type
    try:
        if getXMLTVSourceType() == AddonConst.XMLTV_SOURCE_URL:
            if not getXMLTVURLRemote():
                return False, strings.XMLTV_NO_URL_PROVIDED

        elif getXMLTVSourceType() == AddonConst.XMLTV_SOURCE_LOCAL:
            if not getXMLTVURLLocal():
                return False, strings.XMLTV_NO_FILE_PROVIDED

        if getSFFolder() == 'special://profile':
Exemple #23
0
    provider.initialise(httpManager, sys.argv[0], pluginHandle, addon,
                        language, PROFILE_DATA_FOLDER, RESOURCE_PATH)
    provider.SetSubtitlePaths(SUBTITLE_FILE, NO_SUBTITLE_FILE)

    success = provider.ExecuteCommand(mycgi)
    log(u"executeCommand done", xbmc.LOGDEBUG)

    return success


if __name__ == "__main__":

    try:
        log(u"Name: %s, Version: %s" % (name, version), xbmc.LOGDEBUG)

        if addon.getSetting('http_cache_disable_adv') == 'false':
            httpManager.SetCacheDir(CACHE_FOLDER)

        InitTimeout()

        # Each command processes a web page
        # Get the web page from the cache if it's there
        # If there is an error when processing the web page from the cache
        # we want to try again, this time getting the page from the web
        httpManager.setGetFromCache(True)
        success = executeCommand()

        xbmc.log(
            u"success: %s, getGotFromCache(): %s" %
            (unicode(success), unicode(httpManager.getGotFromCache())),
            xbmc.LOGDEBUG)
Exemple #24
0
class MouseTracker:  # ( Thread ):
    def __init__(self):
        # Thread.__init__( self )

        self.winId = None
        self.window = None

        self.reload_addon = False
        self.addon = Addon("script.mouse.tracker.service")

        self.getMedias()
        self.current_pos = (0, 0)

        self.run()
        # self.start()

    def getMedias(self):
        self.sprite = self.addon.getSetting("sprite")  # "Dog"
        self.speed = self.addon.getSetting("speed").split(".")[0]  # "300"
        try:
            # get control and sprites in xml
            spriteDir = os.path.join(self.addon.getAddonInfo("path"), "resources", "skins", self.sprite, "media")
            xml = windowXML("%s.xml" % self.sprite, self.addon.getAddonInfo("path"), self.sprite, spriteDir=spriteDir)
            # get our controls, before del xml
            self.image = xml.control
            self.sprites = xml.sprites
            # del window object
            del xml
            self.imgId = self.image.getId()
            self.offsetx = 0  # self.image.getPosition()[ 0 ]
        except:
            print_exc()
            raise

    def getWindow(self):
        current_win_id = xbmcgui.getCurrentWindowId()
        if self.winId != current_win_id or not self.window:
            self.winId = current_win_id
            self.window = xbmcgui.Window(self.winId)
            self.getControl()

    def getControl(self):
        self.window.addControl(self.image)
        self.imgId = self.image.getId()
        self.control = self.window.getControl(self.imgId)
        self.control.setVisibleCondition("Window.IsActive(Pointer.xml)")
        self.setAnimation(xbmcgui.getMousePosition())  # , (640,360) )#self.control.getPosition() )

    def setAnimation(self, pos, start=""):
        if start:
            start = "%i,%i" % start
        else:
            start = "%i,%i" % self.current_pos
        end = "%i,%i" % (pos[0] - self.offsetx, pos[1])
        # self.speed = str( self.current_pos[ 0 ] - pos[ 0 ] ).strip( "-" )
        self.control.setAnimations(
            [("conditional", "condition=true effect=slide start=%s end=%s time=%s" % (start, end, self.speed))]
        )

    def run(self):
        try:
            play_sfx = False
            # NB: xbmc.abortRequested not work correctly with threading.Thread
            while not xbmc.abortRequested:
                try:
                    self.getWindow()
                    if self.sprite != self.addon.getSetting("sprite"):
                        self.getMedias()

                    if not xbmc.getCondVisibility("Window.IsActive(Pointer.xml)"):
                        time.sleep(0.3)
                        continue

                    pos = xbmcgui.getMousePosition()

                    if ((pos[0] - self.offsetx) == self.current_pos[0]) and (pos[1] == self.current_pos[1]):
                        self.control.setImage(self.sprites["wait"])
                        if play_sfx:
                            if self.sprites["sfx"] and self.addon.getSetting("playsfx") == "true":
                                xbmc.playSFX(self.sprites["sfx"])
                            play_sfx = False
                    else:
                        play_sfx = True
                        if pos[0] < self.current_pos[0]:
                            self.control.setImage(self.sprites["left"])
                        else:
                            self.control.setImage(self.sprites["right"])

                        # start = "%i,%i" % self.current_pos
                        # end   = "%i,%i" % ( pos[ 0 ]-self.offsetx, pos[ 1 ] )
                        ##self.speed = str( self.current_pos[ 0 ] - pos[ 0 ] ).strip( "-" )
                        # self.control.setAnimations( [ ( 'conditional', 'condition=true effect=slide start=%s end=%s time=%s' % ( start, end, self.speed ) ) ] )
                        self.setAnimation(pos)

                        self.current_pos = (pos[0] - self.offsetx, pos[1])
                        # self.control.setPosition( *self.current_pos )

                    if xbmc.getCondVisibility("Window.IsActive(addonsettings)"):
                        self.reload_addon = True
                    elif self.reload_addon:
                        self.addon = Addon("script.mouse.tracker.service")
                        self.speed = self.addon.getSetting("speed").split(".")[0]
                        self.reload_addon = False
                except SystemExit:
                    break
                except:
                    print_exc()

                time.sleep(float(int(self.speed)) * 0.001)
        except SystemExit:
            pass
        except:
            print_exc()
Exemple #25
0
def getTVShows( format="list", isReload=False ):
    # on recup la liste des series en biblio
    if isReload:
        import xbmcaddon
        globals().update( { "Addon": xbmcaddon.Addon( 'script.tvtunes' ) } )
        del xbmcaddon
    # start time
    st = time.time()
    # list of tvshows
    tvshows = []
    # execute JSONRPC if supported
    if hasattr( xbmc, "executeJSONRPC" ):
        from utils.jsonrpc import jsonrpcAPI
        jsonapi = jsonrpcAPI()
        # json statement for get tvshows
        tvshows = jsonapi.VideoLibrary.GetTVShows( properties=[ "file", "thumbnail" ],
            sort={ "method": "label", "order": "ascending" } ).get( "tvshows", [] )

    # fixe me: check if file is empty, reset if empty
    if tvshows and not tvshows[ 0 ].get( "file" ):
        tvshows = []

    # use sql if tvshows is empty or running on XBMC4Xbox
    if not tvshows:
        from urllib import quote_plus
        # sql statement for tv shows
        sql_data = "SELECT tvshow.c00, path.strPath FROM tvshow, path, tvshowlinkpath WHERE path.idPath=tvshowlinkpath.idPath AND tvshow.idShow=tvshowlinkpath.idShow GROUP BY tvshow.c00"
        # get tvshows
        xml_data = xbmc.executehttpapi( "QueryVideoDatabase(%s)" % quote_plus( sql_data ), )
        # set list of tvshows
        for label, file in re.findall( "<field>(.*?)</field><field>(.*?)</field>", xml_data, re.DOTALL ):
            # get cached thumb
            c_thumb = xbmc.getCacheThumbName( file )
            icon = "special://profile/Thumbnails/Video/%s/%s" % ( c_thumb[ 0 ], c_thumb )
            # add show to listing
            tvshows.append( { "label": _unicode( label ), "file": file, "thumbnail": icon } )

    # print time to parse tvshows
    LOGGER.notice.LOG( "Getting TVShows took %s", time_took( st ) )

    st = time.time()
    path2 = Addon.getSetting( "customtunesfolder" )
    # reset custom path if not exists
    if not path_exists( path2 ): path2 = ""
    default_folder = IsTrue( Addon.getSetting( "savetuneintvshowfolder" ) )
    separate       = IsTrue( Addon.getSetting( "saveinseparatefolder" ) )

    listitems = []
    for tvshow in tvshows:
        # get tune path
        tune = getThemePath( tvshow[ "file" ], path2, tvshow[ "label" ], default_folder, separate )
        #print "%r" % tune
        # initialize listitem
        listitem = xbmcgui.ListItem( tvshow[ "label" ], tvshow[ "file" ], tvshow[ "thumbnail" ] )
        listitem.setPath( tvshow[ "file" ] )
        # set images properties
        banner = tvshow[ "file" ] + "banner.jpg"
        listitem.setProperty( "banner", ( "", banner )[ path_exists( banner ) ] )
        logo = tvshow[ "file" ] + "logo.png"
        listitem.setProperty( "logo", ( "", logo )[ path_exists( logo ) ] )
        # set tune properties
        listitem.setProperty( "tune", tune )
        listitem.setProperty( "IsPlayable", ( "", "true" )[ tune != "" ] )
        # set music info
        listitem.setInfo( 'music', { 'title': tvshow[ "label" ], 'Artist': 'TvTunes', 'Album': 'Eden-pre' } )
        # add item
        if format == "dict":
            listitem = ( tvshow[ "label" ], listitem )
        listitems.append( listitem )
    if format == "dict":
        listitems = dict( listitems )
    # print time to set list
    LOGGER.notice.LOG( "Setup listitems took %s", time_took( st ) )

    # return listing
    return listitems
Exemple #26
0
                    self._close_dialog()
            except:
                LOGGER.error.exc_info(sys.exc_info(), self)
                self._close_dialog()

    def _close_dialog(self):
        self.close()
        xbmc.sleep(600)


if (__name__ == "__main__"):
    mtime = sum([os.path.getmtime(db) for db in DB_PATHS])

    w = Manager("script-MovieSets-Manager.xml", ADDON_DIR)
    w.doModal()
    del w

    if ADDON.getSetting("exporting") == "true" and sum(
        [os.path.getmtime(db) for db in DB_PATHS]) > mtime:
        if xbmcgui.Dialog().yesno(
                "Movie Sets changed...",
                "If you want save your change in NFO files.", LangXBMC(647),
                "", LangXBMC(222), LangXBMC(650)):
            xbmc.executebuiltin("ActivateWindow(VideosSettings)")
            # set Library button
            xbmc.executebuiltin("SetFocus(-100)")
            # set Export video library button
            xbmc.executebuiltin("SetFocus(-73)")
            # select Export video library
            xbmc.executebuiltin("Action(Select)")
Exemple #27
0
# Modules General
from hashlib import sha1
from base64 import b64encode

# Modules XBMC
import xbmc
import xbmcvfs
from xbmcaddon import Addon

# get scraper object
AddonId = "metadata.passion.xbmc.org"
Addon = Addon(AddonId)

# set variables
token = Addon.getSetting("token" + settingMP)
token64 = Addon.getSetting("token64" + settingMP)
login = Addon.getSetting("username" + settingMP)
passw = Addon.getSetting("password" + settingMP)

if settingId == "username" + settingMP:
    heading = Addon.getLocalizedString(30003)
    default = login
    hidden = False
elif settingId == "password" + settingMP:
    heading = Addon.getLocalizedString(30004 + int(bool(settingMP)))
    default = passw
    hidden = True

# condition pour mettre a jour la base
UpdateUserDB = False
Exemple #28
0
            up = browser( **browser_attrs )
            update = update or up
            showInfo( idset, update, setfocus )
    except:
        LOGGER.error.print_exc()
    del w

    xbmc.executebuiltin( "Skin.Reset(MovieSets.Sleep)" )
    return update



if ( __name__ == "__main__" ):
    try:
        idset = None
        strListItem = "Container(%s).ListItem" % ADDON.getSetting( "containerId" )
        if IsTrue( xbmc.getInfoLabel( "%s.Property(IsSet)" % strListItem ) ):
            idset = xbmc.getInfoLabel( "%s.Label2" % strListItem )

        elif xbmc.getInfoLabel( "ListItem.Path" ).startswith( "videodb://1/7" ):
            #test path videodb://1/7/1/
            from re import search
            i = search( "videodb://1/7/(.*?)/", xbmc.getInfoLabel( "ListItem.Path" ) )
            if i: idset = i.group( 1 )

        if idset is not None:
            if showInfo( idset ):
                try: xbmcgui.Window( 10025 ).setProperty( "MovieSets.Update", "true" )
                except: xbmc.executebuiltin( "SetProperty(MovieSets.Update,true)" )
    except:
        LOGGER.error.print_exc()
Exemple #29
0
    print PLUGIN_DATA_PATH


# Définition des variables des dossiers

if os.name == "posix":
    # Linux case
    ROOTDIR = os.path.abspath(os.curdir).replace(";", "")
else:
    # Xbox and Windows case
    ROOTDIR = os.getcwd().replace(";", "")

imgDir = os.path.join(ROOTDIR, "resources", "Icons")


if __settings__.getSetting("FAI") == "":
    __settings__.openSettings(url=sys.argv[0])


def _unicode(s, encoding="utf-8"):
    """ customized unicode, don't raise UnicodeDecodeError exception, return no unicode str instead """
    try:
        s = unicode(s, encoding)
    except:
        pass
    return s


def download(url):
    download_path = "special://temp/playlist.m3u"
    urllib.urlretrieve(url, download_path)
Exemple #30
0
            ))
            # recent tracks:
            artwork.recent_1.setLabel('- [B]{0}[/B] by {1}'.format(
                recent_tracks['recently_played'][0]['title'], recent_tracks['recently_played'][0]['artist']
            ))
            artwork.recent_2.setLabel('- [B]{0}[/B] by {1}'.format(
                recent_tracks['recently_played'][1]['title'], recent_tracks['recently_played'][1]['artist']
            ))
            artwork.recent_3.setLabel('- [B]{0}[/B] by {1}'.format(
                recent_tracks['recently_played'][2]['title'], recent_tracks['recently_played'][2]['artist']
            ))
        sleep(5000)

    log('Artwork closed')
    del artwork


if __name__ == '__main__':
    PLUGIN.run()
    # empty previous thumbnails or create add-on data folder:
    if os.path.exists(ADDON_DATA_FOLDER):
        empty_directory(ADDON_DATA_FOLDER)
    else:
        os.makedirs(ADDON_DATA_FOLDER)

    if sys.argv[0] == 'PLUGIN://{0}/'.format(ADDON_ID) and not ADDON.getSetting('username'):
        executebuiltin('Notification("{0}", "{1}", 6000, "special://home/addons/{2}/icon.png")'
                       .format(ADDON.getLocalizedString(30000),
                               ADDON.getLocalizedString(32202),
                               ADDON_ID))
Exemple #31
0
# -*- coding: utf-8 -*-

import os
import re
import sys
import time
from traceback import print_exc


try:
    import xbmc
    import xbmcgui
    from xbmcaddon import Addon
    Addon = Addon( "weather.google" )
    WEATHER_WINDOW = xbmcgui.Window( 12600 )
    ICONS_SET = int( Addon.getSetting( 'icons_set' ) )
    CURRENT_LOCATION = int( Addon.getSetting( 'currentlocation' ) ) - 1
    
    WEATHER_ICONS = os.path.join( Addon.getAddonInfo( 'path' ), "resources", "images", "" )
    CUSTOM_ICONS = os.path.join( Addon.getSetting( 'custom_icons' ), "" )
    DATE_TIME_FORMAT = "%s %s" % ( xbmc.getRegion( "dateshort" ), xbmc.getRegion( "time" ) )
    CELSIUS_FORMAT = ( "C" in xbmc.getRegion( "tempunit" ) )
    WEATHER_XML = os.path.join( xbmc.translatePath( Addon.getAddonInfo( 'profile' ) ), "weather.xml" )
    if not os.path.exists( xbmc.translatePath( Addon.getAddonInfo( 'profile' ) ) ):
        os.makedirs( xbmc.translatePath( Addon.getAddonInfo( 'profile' ) ) )
except:
    # NOT RUNNING ON XBMC, ON DEV
    WEATHER_WINDOW   = None
    ICONS_SET        = 2
    WEATHER_ICONS    = ""
    CUSTOM_ICONS     = ""
Exemple #32
0
import os
import sys
import xbmc
import xbmcgui
import xbmcplugin
from xbmcaddon import Addon
from resources.lib import get_url, metaInfo, extractMY, dbHelper
import re
import json

ADDON = Addon(id='plugin.video.multiplex')
ADDON_PATH = ADDON.getAddonInfo("path")
addon_handle = int(sys.argv[1])
base_url = sys.argv[0]
download_path = ADDON.getSetting("download_path")
icon = 'https://image.tmdb.org/t/p/w185'
full = 'https://image.tmdb.org/t/p/w780'
bgFile = xbmc.translatePath(
    os.path.join('special://home/addons/plugin.video.multiplex/resources',
                 'fanart.jpg'))


def menu():
    """
	Creating a listing for Current Downloads.
	
	"""
    listing = dbHelper.show()
    for item in listing:
        download = extractMY.extract(item[0])
        movie = download['name']
elif xbmc.getCondVisibility('system.platform.atv2'):
    PLATFORM = "AppleTV2"
elif xbmc.getCondVisibility('system.platform.ios'):
    PLATFORM = "iOS"
elif xbmc.getCondVisibility('system.platform.windows'):
    PLATFORM = "Windows"
elif xbmc.getCondVisibility('system.platform.raspberrypi'):
    PLATFORM = "RaspberryPi"
elif xbmc.getCondVisibility('system.platform.linux'):
    PLATFORM = "Linux"
elif xbmc.getCondVisibility('system.platform.android'):
    PLATFORM = "Android"
else:
    PLATFORM = "Unknown"

if _ADDON.getSetting('deviceNameOpt') == "false":
    # Use Kodi's deviceName
    DEVICENAME = tryDecode(xbmc.getInfoLabel('System.FriendlyName'))
else:
    DEVICENAME = tryDecode(_ADDON.getSetting('deviceName'))
    DEVICENAME = DEVICENAME.replace("\"", "_")
    DEVICENAME = DEVICENAME.replace("/", "_")

# Database paths
_DB_VIDEO_VERSION = {
    13: 78,  # Gotham
    14: 90,  # Helix
    15: 93,  # Isengard
    16: 99,  # Jarvis
    17: 107,  # Krypton
    18: 107  # Leia
Exemple #34
0
try:
    from xbmcaddon import Addon

    __settings__ = Addon( id="script.calendar" )
    __language__ = __settings__.getLocalizedString
    print "Mode AddOn ON"


except : 
    __settings__ = xbmc.Settings(ROOTDIR)
    __language__ = xbmc.getLocalizedString
    print "Mode plugin ON"


firstWeekDay = __settings__.getSetting("fwday")
print firstWeekDay

if firstWeekDay == "true" :
    calendar.setfirstweekday(6)
else :
    calendar.setfirstweekday(0)


class Agenda :

    def __init__(self):
         
       
        self.monthName = calendar.month_name 
                
Exemple #35
0
# Modules General
from hashlib import sha1
from base64 import b64encode

# Modules XBMC
import xbmc
import xbmcvfs
from xbmcaddon import Addon


# get scraper object
AddonId = "metadata.passion.xbmc.org"
Addon   = Addon( AddonId )

# set variables
token   = Addon.getSetting( "token"    + settingMP )
token64 = Addon.getSetting( "token64"  + settingMP )
login   = Addon.getSetting( "username" + settingMP )
passw   = Addon.getSetting( "password" + settingMP )

if settingId == "username" + settingMP:
    heading = Addon.getLocalizedString( 30003 )
    default = login
    hidden  = False
elif settingId == "password" + settingMP:
    heading = Addon.getLocalizedString( 30004 + int( bool( settingMP ) ) )
    default = passw
    hidden  = True

# condition pour mettre a jour la base
UpdateUserDB = False
Exemple #36
0
LangXBMC = xbmc.getLocalizedString # XBMC strings


# for more see [$SOURCE/xbmc/interfaces/json-rpc/ServiceDescription.h]
VIDEO_FIELDS_MOVIE = [
    "title", "genre", "year", "rating", "director", "trailer",
    "tagline", "plot", "plotoutline", "originaltitle", "lastplayed",
    "playcount", "writer", "studio", "mpaa", "cast", "country",
    "imdbnumber", "runtime", "set", "showlink", "streamdetails",
    "top250", "votes", "fanart", "thumbnail", "file", "sorttitle",
    "resume", "setid", "dateadded", "tag"
    ]
SORTTITLE = { "method": "sorttitle", "order": "ascending" } #"descending"

# get user separator
try: separator = " %s " % ADDON.getSetting( "separator" )
except: separator = " / "
# get user prefer order
try: SORTTITLE[ "order" ] = ( "ascending", "descending" )[ int( ADDON.getSetting( "order" ) ) ]
except: pass


def time_took( t ):
    return str( timedelta( seconds=( time.time() - t ) ) )


def _encode( text, encoding="utf-8" ):
    try: text = text.encode( encoding )
    except: pass
    return text
Exemple #37
0
def getContainerMovieSets(infoSet=None):
    jsonapi = jsonrpc.jsonrpcAPI()
    # GET MOVIESETS
    json = jsonapi.VideoLibrary.GetMovieSets(properties=VIDEO_FIELDS_MOVIESET)

    movie_sets = json.get("sets", [])
    total = json.get("limits", {}).get("total") or len(movie_sets)
    # print total

    # dico for synchronize main container on VideoLibrary with virtual container of MovieSets
    moviesets = {}
    if infoSet is not None:
        # get only one user want info
        listitems = []
    else:
        # set dymmy listitem, label: container title , label2: total movie sets
        listitems = [xbmcgui.ListItem("Container MovieSets", str(total))]

    # reload addon settings
    try:
        ADDON = Addon("script.moviesets")
    except:
        pass
    # get user separator
    try:
        separator = " %s " % ADDON.getSetting("separator")
    except:
        separator = " / "
    # get user prefer order
    try:
        SORTTITLE["order"] = ("ascending", "descending")[int(ADDON.getSetting("order"))]
    except:
        pass

    # enum movie sets
    for countset, movieset in enumerate(movie_sets):
        # print movieset.keys()#[u'title', u'fanart', u'label', u'playcount', u'thumbnail', u'setid']
        try:
            idSet = movieset["setid"]
            # print ( idSet, infoSet, str( idSet ) != infoSet )
            if infoSet is not None and str(idSet) != infoSet:
                continue  # get only one user want info
            # get saga icon
            icon = movieset["thumbnail"]
            icon = ("", icon)[path_exists(translatePath(icon))]
            # get saga fanart
            # d, f = os.path.split( movieset[ 'thumbnail' ] )
            # c_fanart = "%sFanart/%s" % ( d[ :-1 ], f )
            c_fanart = movieset["fanart"]
            Fanart_Image = ("", c_fanart)[path_exists(translatePath(c_fanart))]
            # fixe me: xbmc not change/reload/refresh image if path is same
            if Fanart_Image:
                Fanart_Image = get_cached_thumb(Fanart_Image)
            if icon:
                icon = get_cached_thumb(icon)

            # set movieset listitem
            listitem = xbmcgui.ListItem(movieset["label"], str(idSet), icon, icon)
            # listitem.setPath( "ActivateWindow(10025,videodb://1/7/%i/)" % idSet )

            # get movies list of movieset
            # not good, return only Video.Fields.MovieSet. [use Files.GetDirectory for more fields]
            # json = jsonapi.VideoLibrary.GetMovieSetDetails( setid=idSet, properties=VIDEO_FIELDS_MOVIESET )
            json = jsonapi.Files.GetDirectory(
                directory="videodb://1/7/%i/" % idSet, properties=VIDEO_FIELDS_MOVIE, sort=SORTTITLE, media="video"
            )
            movies = json.get("files", [])
            total_movies = json.get("limits", {}).get("total") or len(movies)
            # set base variables
            watched, unwatched = 0, total_movies
            rating, votes = 0.0, 0
            plotset = ""
            mpaa = set()
            studios = set()
            genres = set()
            years = set()
            # fanartsets = set()
            countries = set()
            stackpath = []
            stacktrailer = []
            duration = 0.1
            iWidth = 0
            iHeight = 0
            aspect = 0.0

            # enum movies
            for count, movie in enumerate(movies):
                if not bool(movie):
                    continue
                # print movie.keys()#[u'rating', u'set', u'filetype', u'file', u'year', u'id', u'streamDetails', u'plot', u'votes', u'title', u'fanart', u'mpaa', u'writer', u'label', u'type', u'thumbnail', u'plotoutline', u'resume', u'director', u'imdbnumber', u'studio', u'showlink', u'genre', u'productioncode', u'country', u'premiered', u'originaltitle', u'cast', u'tagline', u'playcount', u'runtime', u'top250', u'trailer']
                # for more infos
                # print jsonapi.VideoLibrary.GetMovieDetails( movieid=int(movie["id"]), properties=VIDEO_FIELDS_MOVIE )
                # print movie[ "votes" ]
                # continue
                try:
                    # optional
                    try:
                        sdv = movie["streamdetails"].get("video", [{}])
                        duration += sum(d.get("duration", 0) for d in sdv)
                        iWidth += sum(w.get("width", 0) for w in sdv)
                        iHeight += sum(h.get("height", 0) for h in sdv)
                        aspect += sum(a.get("aspect", 0) for a in sdv)
                    except:
                        pass
                    # update mpaa
                    if movie.get("mpaa"):
                        mpaa.add(movie["mpaa"])
                    # set watched count
                    # print movie.get( "playcount" )
                    if bool(movie["playcount"]):
                        watched += 1
                    # update genres and years
                    if movie["year"] > 0:
                        years.add(str(movie["year"]))
                    try:
                        genres.update(movie["genre"].split(" / "))
                    except:
                        genres.update(movie["genre"])
                    genres.discard("")
                    # add country
                    if movie.get("country"):
                        try:
                            countries.update(movie["country"].split(" / "))
                        except:
                            countries.update(movie["country"])
                    countries.discard("")
                    # add studio
                    if movie.get("studio"):
                        try:
                            studios.update(movie["studio"].split(" / "))
                        except:
                            studios.update(movie["studio"])
                    studios.discard("")
                    # add plot movie to plotset
                    plotset += "[B]%(title)s (%(year)s)[/B][CR]%(plot)s[CR][CR]" % movie
                    # set stack, add movie path and trailer
                    if movie.get("trailer"):
                        stacktrailer.append(movie["trailer"])
                    stackpath.append(movie["file"])
                    # use first path if stacked. for prevent this [WARNING: XFILE::CFileFactory::CreateLoader - Unsupported protocol(stack) in path_exists( moviepath + "extrafanart" )]
                    if "stack://" in movie["file"]:
                        movie["file"] = movie["file"][8:].split(" , ")[0]
                    # set RatingAndVotes info
                    rating += movie.get("rating", 0.0)
                    try:
                        votes += int(movie.get("votes", "0").replace(",", ""))
                    except:
                        pass

                    # set movies properties 'plot', 'votes', 'rating', 'fanart', 'title', 'label',
                    # 'file', 'year', 'genre','playcount', 'runtime', 'thumbnail', 'trailer'
                    b_property = "movie.%i." % (count + 1)
                    moviepath = os.path.dirname(movie["file"]) + ("/", "\\")[not movie["file"].count("/")]
                    listitem.setProperty(b_property + "Title", movie["title"])
                    listitem.setProperty(b_property + "sortTitle", movie.get("sorttitle", ""))
                    listitem.setProperty(b_property + "Filename", os.path.basename(movie["file"]))
                    listitem.setProperty(b_property + "Path", moviepath)
                    listitem.setProperty(b_property + "Plot", movie["plot"])
                    listitem.setProperty(b_property + "Year", str(movie["year"] or ""))
                    listitem.setProperty(b_property + "Trailer", movie.get("trailer", ""))
                    # set icon property
                    icon = movie["thumbnail"]
                    icon = ("", icon)[path_exists(translatePath(icon))]
                    # print repr( icon )
                    if not icon:  # check for auto-
                        _path, _file = os.path.split(icon)
                        a_icon = os.path.join(_path, "auto-" + _file)
                        icon = ("", a_icon)[path_exists(translatePath(a_icon))]
                    listitem.setProperty(b_property + "Icon", icon)
                    # set fanart property
                    fanart = movie["fanart"]
                    fanart = ("", fanart)[path_exists(translatePath(fanart))]
                    listitem.setProperty(b_property + "Fanart", fanart)
                    if fanart and not Fanart_Image:
                        Fanart_Image = fanart
                    # set extrafanart: if not exists set empty
                    extrafanart = moviepath + "extrafanart"
                    extrafanart = ("", extrafanart)[path_exists(extrafanart)]
                    listitem.setProperty(b_property + "ExtraFanart", extrafanart)
                    # set extrafanart for movieset if exists set first found
                    # fanartsets.add( os.path.dirname( os.path.dirname( moviepath ) ) )
                    if listitem.getProperty("ExtraFanart"):
                        continue
                    fanartset = os.path.dirname(os.path.dirname(moviepath))
                    fanartset += ("/", "\\")[not fanartset.count("/")] + "extrafanart"
                    if path_exists(fanartset):
                        listitem.setProperty("ExtraFanart", fanartset)
                    elif extrafanart:
                        listitem.setProperty("ExtraFanart", extrafanart)

                    # print _encode(movie[ "file" ]), _encode(moviepath), _encode(fanartset)
                    # print "-"*100
                except:
                    LOGGER.error.print_exc()

            # set movieset properties
            listitem.setProperty("IsSet", "true")
            listitem.setProperty("idSet", str(idSet))
            listitem.setProperty("WatchedMovies", str(watched))
            listitem.setProperty("UnWatchedMovies", str(unwatched - watched))
            listitem.setProperty("TotalMovies", str(total_movies))
            listitem.setProperty("Fanart_Image", Fanart_Image)
            listitem.setProperty("Years", separator.join(sorted(years, reverse=(SORTTITLE["order"] == "descending"))))
            try:
                listitem.setProperty("StarRating", getStarRating(rating / float(total_movies)))
            except:
                listitem.setProperty("StarRating", "rating0.png")
            listitem.setProperty("Countries", separator.join(countries))
            listitem.setProperty(
                "VideoResolution",
                VideoDimsToResolutionDescription(int(iWidth / total_movies), int(iHeight / total_movies)),
            )
            listitem.setProperty("VideoAspect", VideoAspectToAspectDescription(float(aspect / total_movies)))

            # set stack path
            stackpath = " ; ".join(stackpath)
            if " ; " in stackpath:
                stackpath = "stackset://" + stackpath
            listitem.setPath(quote_plus(_encode(stackpath)))
            # set stack trailer
            stacktrailer = " , ".join(stacktrailer)
            if " , " in stacktrailer:
                stacktrailer = "stack://" + stacktrailer

            # set listitem infoslabels
            listitem.setInfo(
                "video",
                {
                    "plot": plotset,
                    "votes": str(votes),
                    "title": movieset["label"],
                    "studio": separator.join(studios),
                    # "duration": str( round( duration / 60.0, 2 ) ),
                    "duration": str(int(duration / 60.0)),
                    "rating": (rating / float(total_movies)),
                    "genre": separator.join(sorted([g.strip() for g in genres])),
                    "mpaa": separator.join([m.strip() for m in mpaa]),
                    "trailer": stacktrailer,
                },
            )

            moviesets[_encode(movieset["label"])] = countset + 1
            listitems.append(listitem)

            if infoSet is not None and idSet == infoSet:
                moviesets[movieset["label"]] = 0
                break  # get only one user want info
        except:
            LOGGER.error.print_exc()

    return listitems, moviesets
Exemple #38
0
import json
import xbmc
import xbmcgui
import xbmcplugin
import requests
from bs4 import BeautifulSoup
from xbmcaddon import Addon
from urlparse import parse_qsl
from resources.lib import extractMY, get_url, metaInfo, dbHelper
from resources.lib.custom_api import linkstock, keeplinks
import concurrent.futures
from concurrent.futures import ThreadPoolExecutor

addon_handle = int(sys.argv[1])
ADDON = Addon(id='plugin.video.multiplex')
main_url = ADDON.getSetting("main_url")
xbetmovies = ADDON.getSetting("xbetmovies")
icon = 'https://image.tmdb.org/t/p/w185'
full = 'https://image.tmdb.org/t/p/w780'
bgFile = xbmc.translatePath(
    'special://home/addons/plugin.video.multiplex/resources/fanart.jpg')
n = 1


def getPrimaryLinks(url):
    page = requests.get(url)
    soup = BeautifulSoup(page.content, 'html.parser')
    links = (d["href"] for d in soup.select(".bw_thumb a"))
    return links

Exemple #39
0
class NetflixCommon(object):
    """
    Stuff shared between / used from service and addon"""
    def __init__(self, plugin_handle, base_url):

        self.addon = Addon()
        self.data_path = xbmc.translatePath(self.addon.getAddonInfo('profile'))
        self.cookie_path = self.data_path + 'COOKIE'
        self.plugin = self.addon.getAddonInfo('name')
        self.verb_log = self.addon.getSetting('logging') == 'true'
        self.plugin_handle = plugin_handle
        self.base_url = base_url
        self.version = self.addon.getAddonInfo('version')

        xbmcvfs.mkdir(path=self.data_path)

    def get_addon(self):
        """Return the current addon instance"""
        return self.addon

    def get_addon_info(self, name):
        """Return the current addon instance"""
        return self.addon.getAddonInfo(name)

    def set_setting(self, key, value):
        return self.addon.setSetting(key, value)

    def get_setting(self, key):
        return self.addon.getSetting(key)

    def flush_settings(self):
        self.addon = Addon()

    def get_esn(self):
        """
        Returns the esn from settings
        """
        return self.addon.getSetting('esn')

    def set_esn(self, esn):
        """
        Returns True if MSL reset is required
        """
        stored_esn = self.get_esn()
        if not stored_esn and esn:
            self.set_setting('esn', esn)
            return True
        return False

    def get_credentials(self):
        from NetflixCredentials import NetflixCredentials
        email = self.get_setting('email')
        password = self.get_setting('password')

        if '@' in email:
            self.set_credentials(email, password)
            return {'email': email, 'password': password}

        return NetflixCredentials().decode_credentials(email, password)

    def set_credentials(self, email, password):
        from NetflixCredentials import NetflixCredentials
        encoded = NetflixCredentials().encode_credentials(email, password)
        self.set_setting('email', encoded['email'])
        self.set_setting('password', encoded['password'])

    def log(self, msg, level=xbmc.LOGDEBUG):
        """Adds a log entry to the Kodi log

        Parameters
        ----------
        msg : :obj:`str`
            Entry that should be turned into a list item

        level : :obj:`int`
            Kodi log level
        """
        if isinstance(msg, unicode):
            msg = msg.encode('utf-8')
        xbmc.log('[%s] %s' % (self.plugin, msg.__str__()), level)

    @staticmethod
    def check_folder_path(path):
        """
        Check if folderpath ends with path delimator
        If not correct it (makes sure xbmcvfs.exists is working correct)
        """
        if isinstance(path, unicode):
            check = path.encode('ascii', 'ignore')
            if '/' in check and not str(check).endswith('/'):
                end = u'/'
                path = path + end
                return path
            if '\\' in check and not str(check).endswith('\\'):
                end = u'\\'
                path = path + end
                return path
        if '/' in path and not str(path).endswith('/'):
            path = path + '/'
            return path
        if '\\' in path and not str(path).endswith('\\'):
            path = path + '\\'
            return path

    @staticmethod
    def file_exists(data_path, filename):
        """
        Checks if a given file exists
        :param filename: The filename
        :return: True if so
        """
        return xbmcvfs.exists(path=data_path + filename)

    @staticmethod
    def save_file(data_path, filename, content):
        """
        Saves the given content under given filename
        :param filename: The filename
        :param content: The content of the file
        """

        file_handle = xbmcvfs.File(filepath=data_path + filename, mode='w')
        file_content = file_handle.write(content)
        file_handle.close()

    @staticmethod
    def load_file(data_path, filename):
        """
        Loads the content of a given filename
        :param filename: The file to load
        :return: The content of the file
        """
        file_handle = xbmcvfs.File(filepath=data_path + filename)
        file_content = file_handle.read()
        file_handle.close()
        return file_content

    @staticmethod
    def list_dir(data_path):
        return xbmcvfs.listdir(data_path)
Exemple #40
0
import os
import re
import sys
from urllib import quote_plus, unquote_plus
from traceback import print_exc

#modules XBMC
import xbmc
import xbmcgui
from xbmcaddon import Addon

ADDON = Addon("plugin.video.tou.tv")
ADDON_NAME = ADDON.getAddonInfo("name")
ADDON_CACHE = xbmc.translatePath(ADDON.getAddonInfo("profile"))
CACHE_EXPIRE_TIME = float(
    ADDON.getSetting("expiretime").replace("0", ".5").replace("25", "0"))
SCRIPT_REFRESH = os.path.join(ADDON.getAddonInfo('path'), "resources", "lib",
                              "refresh.py")

LangXBMC = xbmc.getLocalizedString

import scraper

STRING_FOR_ALL = "[B]CONTENU accessible à TOUS[/B] - Cette émission peut être regardée partout dans le monde."

FAVOURITES_XML = os.path.join(ADDON_CACHE, "favourites.xml")

G_GENRE = unicode(xbmc.getInfoLabel("ListItem.Genre"), "utf-8")
#ACTION_INFO = not bool( xbmc.getInfoLabel( "ListItem.Episode" ) )

WINDOW_PROGRESS = None
from loggingexception import LoggingException
from BeautifulSoup import BeautifulSoup


pluginName  = u'plugin.video.irishtv'
pluginHandle = int(sys.argv[1])
baseURL = sys.argv[0]

addon = Addon(pluginName)
language = addon.getLocalizedString

import mycgi

from httpmanager import HttpManager

dbg = addon.getSetting(u"debug") == u"true"
dbglevel = 3

from utils import log
from socket import setdefaulttimeout
from socket import getdefaulttimeout

import utils
import rtmp

import providerfactory
from provider import Provider

xhausUrl = "http://www.xhaus.com/headers"

# Use masterprofile rather profile, because we are caching data that may be used by more than one user on the machine
# Modules General
from hashlib import sha1
from base64 import b64encode

# Modules XBMC
import xbmc
import xbmcvfs
from xbmcaddon import Addon


# get scraper object
AddonId = "metadata.media.passion.org"
Addon   = Addon( AddonId )

# set variables
token   = Addon.getSetting( "token" )
token64 = Addon.getSetting( "token64" )
login   = Addon.getSetting( "username" )
passw   = Addon.getSetting( "password" )

if settingId == "username":
    heading = Addon.getLocalizedString( 30001 )
    default = login
    hidden  = False
elif settingId == "password":
    heading = Addon.getLocalizedString( 30002 )
    default = passw
    hidden  = True

# condition pour mettre a jour la base
UpdateUserDB = False
Exemple #43
0
elif xbmc.getCondVisibility('system.platform.atv2'):
    PLATFORM = "AppleTV2"
elif xbmc.getCondVisibility('system.platform.ios'):
    PLATFORM = "iOS"
elif xbmc.getCondVisibility('system.platform.windows'):
    PLATFORM = "Windows"
elif xbmc.getCondVisibility('system.platform.raspberrypi'):
    PLATFORM = "RaspberryPi"
elif xbmc.getCondVisibility('system.platform.linux'):
    PLATFORM = "Linux"
elif xbmc.getCondVisibility('system.platform.android'):
    PLATFORM = "Android"
else:
    PLATFORM = "Unknown"

DEVICENAME = tryDecode(_ADDON.getSetting('deviceName'))
DEVICENAME = DEVICENAME.replace(":", "")
DEVICENAME = DEVICENAME.replace("/", "-")
DEVICENAME = DEVICENAME.replace("\\", "-")
DEVICENAME = DEVICENAME.replace("<", "")
DEVICENAME = DEVICENAME.replace(">", "")
DEVICENAME = DEVICENAME.replace("*", "")
DEVICENAME = DEVICENAME.replace("?", "")
DEVICENAME = DEVICENAME.replace('|', "")
DEVICENAME = DEVICENAME.replace('(', "")
DEVICENAME = DEVICENAME.replace(')', "")
DEVICENAME = DEVICENAME.strip()

# Database paths
_DB_VIDEO_VERSION = {
    13: 78,  # Gotham
Exemple #44
0
# -*- coding: utf-8 -*-

import os
import sys

import xbmc
from xbmcaddon import Addon


SCRIPT = None
ARGS = "".join( sys.argv[ 1:2 ] )
ADDON = Addon( 'script.tvtunes' )

if "backend" in ARGS.lower():
    if xbmc.getInfoLabel( "Window(10025).Property(TvTunesIsRunning)" ).lower() != "true":
        SCRIPT = ( "tvtunes_backend", "tunesplayer" )[ ADDON.getSetting( "useplayerv2" ).lower() == "true" ]
else:
    SCRIPT = "tvtunes"

if SCRIPT:
    xbmc.executebuiltin( 'RunScript(%s.py,%s)' % ( 
        os.path.join( ADDON.getAddonInfo( 'path' ), "resources", "lib", SCRIPT ),
        ARGS ) )
Exemple #45
0
import os
import re
import sys
from urllib import quote_plus, unquote_plus
from traceback import print_exc

#modules XBMC
import xbmc
import xbmcgui
from xbmcaddon import Addon


ADDON             = Addon( "plugin.video.tou.tv" )
ADDON_NAME        = ADDON.getAddonInfo( "name" )
ADDON_CACHE       = xbmc.translatePath( ADDON.getAddonInfo( "profile" ) )
CACHE_EXPIRE_TIME = float( ADDON.getSetting( "expiretime" ).replace( "0", ".5" ).replace( "25", "0" ) )
SCRIPT_REFRESH    = os.path.join( ADDON.getAddonInfo( 'path' ), "resources", "lib", "refresh.py" )

LangXBMC    = xbmc.getLocalizedString

import scraper

STRING_FOR_ALL = "[B]CONTENU accessible à TOUS[/B] - Cette émission peut être regardée partout dans le monde."

FAVOURITES_XML = os.path.join( ADDON_CACHE, "favourites.xml" )

G_GENRE     = unicode( xbmc.getInfoLabel( "ListItem.Genre" ), "utf-8" )
#ACTION_INFO = not bool( xbmc.getInfoLabel( "ListItem.Episode" ) )


WINDOW_PROGRESS = None
Exemple #46
0
import os
import sys
import xbmc
import xbmcgui
import xbmcplugin
from xbmcaddon import Addon
from resources.lib import get_url, dbHelper, extractMY
from urlparse import parse_qsl
import re
import json

base_url = sys.argv[0]
addon_handle = int(sys.argv[1])
settings = Addon(id='plugin.video.multiplex')
main_url = settings.getSetting("main_url")
download_path = settings.getSetting("download_path")
icon = 'https://image.tmdb.org/t/p/w185'
full = 'https://image.tmdb.org/t/p/w780'
bgFile = xbmc.translatePath(
    os.path.join('special://home/addons/plugin.video.multiplex/resources',
                 'fanart.jpg'))


def menu(links):
    params = dict(parse_qsl(sys.argv[2][1:]))
    fname = params['filename']
    if os.path.exists(os.path.join(download_path, fname)):
        dl_context = 'Resume'
    else:
        dl_context = 'Download'
    for link in links:
Exemple #47
0
                imdb_id = SearchMovie(query=item['title'], year=item['year'])
                MyLog("Search IMDB:%s" % imdb_id)
                if not imdb_id[:2] == "tt":
                    imdb_id = SearchMovie(query=item['title'],
                                          year=(int(item['year']) - 1))
                    MyLog("Search IMDB(2):%s" % imdb_id)
                if imdb_id[:2] == "tt":
                    GetJson(imdb_id, 0, 0, item['file_original_path'])
            except:
                pass

    # Search Local File
    if not imdb_id:
        ManualSearch(item['title'])
    endOfDirectory(int(sys.argv[1]))
    if MyAddon.getSetting("Debug") == "true":
        if imdb_id[:2] == "tt":
            Dialog().ok("Debug " + MyVersion, str(item),
                        "imdb: " + str(imdb_id))
        else:
            Dialog().ok("Debug " + MyVersion, str(item), "NO IDS")

elif action == 'manualsearch':
    searchstring = getParam("searchstring", params)
    ManualSearch(searchstring)
    endOfDirectory(int(sys.argv[1]))

elif action == 'download':
    id = getParam("id", params)
    MyLog("Download ID:%s" % id)
    subs = download(id)
# *  along with XBMC; see the file COPYING. If not, write to
# *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
# *  http://www.gnu.org/copyleft/gpl.html

import os
import sys
import xbmc
import xbmcgui
import time

from traceback import print_exc
from xbmcaddon import Addon

ADDON = Addon( "plugin.video.illicoweb" )
ADDON_CACHE = xbmc.translatePath( ADDON.getAddonInfo( "profile" ) )
DEBUG = ADDON.getSetting('debug')

LANGUAGE = ADDON.getLocalizedString

def addon_log(string):
    #if DEBUG == 'true':
    xbmc.log("[Illico-Service]: %s" %(string))
    
def format_time(seconds):
    minutes, seconds = divmod(seconds, 60)
    if minutes > 60:
        hours, minutes = divmod(minutes, 60)
        return "%02d:%02d:%02d" % (hours, minutes, seconds)
    else:
        return "%02d:%02d" % (minutes, seconds)
Exemple #49
0
from xbmcaddon import Addon
import requests
import xbmc
import xbmcgui
import os
import re
from resources.lib import extractMY, dbHelper

ADDON = Addon(id='plugin.video.multiplex')
api_key = '01aa40b064d705f0b7a530f5df35b2b4'
fetch_info = ADDON.getSetting("fetch_info")
thumb = 'https://image.tmdb.org/t/p/w154'
icon = 'https://image.tmdb.org/t/p/w185'
full = 'https://image.tmdb.org/t/p/w780'
iconFile = 'DefaultVideo.png'
bgFile = xbmc.translatePath(
    os.path.join('special://home/addons/plugin.video.multiplex/resources',
                 'fanart.jpg'))


def get(movie):
    title = movie['name']
    year = movie['year']
    if re.search('s\d', title):
        stype = 'tv'
    else:
        stype = 'movie'
    response = requests.get(
        'https://api.themoviedb.org/3/search/{}?api_key={}&query={}&year={}'.
        format(stype, api_key, re.sub('s\d', '', title), year))
    data = response.json()
Exemple #50
0
class Translator(xbmcgui.WindowXML):
    CONTROL_LIST_A = 50

    def __init__(self, *args, **kwargs):
        self.RestartXBMC_ReloadLanguage = False
        self.IsModified = False
        self.googleTrans = False
        self.listitems = []

        self.Addon = Addon(AddonId)
        self._get_settings()

    def _get_settings(self):
        self.settings = {}
        self.settings["LanguagePath"] = self.Addon.getSetting("LanguagePath")

        self.settings["viewmode"] = int(self.Addon.getSetting("viewmode"))
        self.settings["sortmethod"] = int(self.Addon.getSetting("sortmethod"))
        self.settings["sortorder"] = int(self.Addon.getSetting("sortorder"))
        self.settings["savefolderviews"] = (
            self.Addon.getSetting("savefolderviews") == "true")

    def setListItems(self):
        self.DefaultLanguage = "English"
        self.CurrentLanguage = xbmc.getLanguage()
        self.FolderLanguage = self.settings["LanguagePath"]
        self.DefaultFolderLanguage = "special://xbmc/language/"
        if not os.path.exists(xbmc.translatePath(self.FolderLanguage)):
            print "Folder language not exists! '%s'" % self.FolderLanguage
            self.FolderLanguage = self.DefaultFolderLanguage

        if not self.FolderLanguage.startswith("special"):
            for folder in ["profile", "home", "xbmc"]:
                special = "special://%s/" % folder
                self.FolderLanguage = self.FolderLanguage.replace(
                    xbmc.translatePath(special), special)

        if (xbmc.translatePath("special://skin/")
                in xbmc.translatePath(self.FolderLanguage)):
            self.FolderLanguage = "special://skin/language/"
        self.FolderLanguage = self.FolderLanguage.replace("\\",
                                                          "/").rstrip("/")

        self.setContainerProperties()
        # get languages source
        self.language = Language(self)
        self.listitems = self.language.listitems

    def onInit(self):
        xbmc.executebuiltin("ActivateWindow(busydialog)")
        self.setSortMethodControl()
        self.setContainer(setviewmode=self.settings["viewmode"])
        LOG("notice", "initialized took %s", time_took(START_TIME))
        xbmc.executebuiltin("Dialog.Close(busydialog)")

    def setSortMethodControl(self):
        label = (20316, 103)[self.settings["sortmethod"]]
        self.getControl(13).setLabel(xbmc.getLocalizedString(label))

    def setContainerProperties(self):
        self.setProperty("IsModified",
                         ("",
                          "Language file has been changed!")[self.IsModified])
        self.setProperty("CurrentLanguage", self.CurrentLanguage)
        self.setProperty("FolderLanguage", self.FolderLanguage)
        self.setProperty("CurrentEnglishString", "")
        self.Addon = Addon(AddonId)
        self.setProperty("ExtraKeyboard_TopOrBottom",
                         ("top",
                          "bottom")[int(self.Addon.getSetting("ExtraKB"))])

    def setContainer(self, filter="", SelectId="", setviewmode=None):
        if setviewmode is not None:
            self.ContainerId = (50, 51)[setviewmode]
            if setviewmode: xbmc.executebuiltin("SendClick(2)")
        else:
            self.ContainerId = (
                50, 51)[xbmc.getCondVisibility("Control.IsVisible(51)")]
        try:

            if not bool(self.listitems):
                if self.IsModified:
                    # ask for save change
                    self._save_change()
                self.IsModified = False
                self.googleTrans = False
                self.getControl(self.ContainerId).reset()
                self.setListItems()

            self.setContainerProperties()
            if self.listitems:
                selectitem = 0

                additems = []
                if not filter:
                    additems = self.listitems
                else:
                    for li in self.listitems:
                        if filter == "UnTranslated" and li.getProperty(
                                "UnTranslated") == "false":
                            continue
                        if filter == "Translated" and li.getProperty(
                                "IsModified") != "true":
                            continue
                        additems.append(li)

                if additems:
                    if self.settings["sortmethod"]:
                        additems = sorted(additems,
                                          key=lambda li: normalize_string(
                                              li.getLabel(), True))
                    if self.settings["sortorder"]:
                        additems = list(reversed(additems))
                    for count, li in enumerate(additems):
                        if li.getProperty("id") == SelectId:
                            selectitem = count

                # add listitems
                self.getControl(self.ContainerId).reset()
                self.getControl(self.ContainerId).addItems(additems)
                if additems:  #self.getControl( self.ContainerId ).size():
                    self.getControl(self.ContainerId).selectItem(selectitem)
                    self.setFocusId(self.ContainerId)

            # fixe view on xbox
            if UNDER_XBOX and setviewmode is not None:
                xbmc.executebuiltin("Container.SetViewMode(%i)" %
                                    self.ContainerId)
                xbmc.sleep(20)
                self.setFocusId(self.ContainerId)
        except:
            print_exc()

    def onFocus(self, controlID):
        pass

    def sendClick(self, controlID):
        try:
            self.onClick(controlID)
        except:
            print_exc()

    def getTranslate(self, text, minimal=2):
        translated = ""
        if text:
            if (len(text) <= minimal) or text.isdigit():
                translated = text
            else:
                country = self.Addon.getSetting("country")
                if country.lower() == "auto": country = self.CurrentLanguage
                pDialog = xbmcgui.DialogProgress()
                pDialog.create("Google Translate", "English to %s" % country,
                               text, "Please wait...")
                try:
                    import LanguageTools
                    translated = LanguageTools.translate_text(
                        text, country, "google")
                except:
                    print_exc()
        self.googleTrans = False
        xbmc.executebuiltin("Dialog.Close(progressdialog)")
        return translated

    def onClick(self, controlID):
        try:
            self.ContainerId = (
                50, 51)[xbmc.getCondVisibility("Control.IsVisible(51)")]
            if controlID == self.ContainerId:
                # get clicked listitem
                listitem = self.getControl(self.ContainerId).getSelectedItem()
                # get position
                pos = int(listitem.getProperty("Position"))
                # get id
                id = listitem.getProperty("id")
                if id:
                    CurrentEnglishString = fixe_line_return(
                        listitem.getLabel2(), True)

                    DefaultText = fixe_line_return(listitem.getLabel(), True)
                    old_text = DefaultText
                    if self.googleTrans:
                        old_text = self.getTranslate(CurrentEnglishString)
                    old_text = old_text or DefaultText

                    if (self.Addon.getSetting("BoldKB") == "true"):
                        CurrentEnglishString = "[B]%s[/B]" % CurrentEnglishString
                    self.setProperty("CurrentEnglishString",
                                     CurrentEnglishString)
                    self.setProperty("ShowCurrentEnglishString", "true")

                    kb = xbmc.Keyboard(
                        old_text,
                        self.CurrentLanguage + " (Enter desired string)",
                        False)
                    kb.doModal()
                    if kb.isConfirmed():
                        new_text = kb.getText()
                        if new_text != DefaultText:
                            new_text = fixe_line_return(new_text)
                            self.listitems[pos].setLabel(new_text)
                            self.listitems[pos].setProperty(
                                "IsModified", "true")
                            self.setProperty(
                                "IsModified",
                                "Language file has been changed!")
                            self.IsModified = True
                    self.setProperty("ShowCurrentEnglishString", "")

            # PAS TRES BON COMME FILTRE :(
            UnTranslated = self.getControl(19).isSelected()
            Translated = self.getControl(20).isSelected()
            Changed = self.getControl(21).isSelected()
            filter = ("", "UnTranslated")[UnTranslated]
            filter = (filter, "Translated")[Translated]
            filter = (filter, "Changed")[Changed]

            # get selected id for selectitem again, if controlID 22 clicked
            SelectId = xbmc.getInfoLabel(
                "Container(50).ListItem.Property(id)") or xbmc.getInfoLabel(
                    "Container(51).ListItem.Property(id)")
            if controlID == 19:
                # UNTRANSLATED BUTTON
                filter = ("", "UnTranslated")[UnTranslated]
                self.setContainer(filter, SelectId)
                self.getControl(19).setSelected(UnTranslated)
                self.getControl(20).setSelected(False)
                self.getControl(21).setSelected(False)

            elif controlID == 20:
                # TRANSLATED BUTTON
                filter = ("", "Translated")[Translated]
                self.setContainer(filter, SelectId)
                self.getControl(20).setSelected(Translated)
                self.getControl(19).setSelected(False)
                self.getControl(21).setSelected(False)

            elif controlID == 21:
                # CHANGED BUTTON
                filter = ("", "Changed")[Changed]
                self.setContainer(filter, SelectId)
                self.getControl(21).setSelected(Changed)
                self.getControl(19).setSelected(False)
                self.getControl(20).setSelected(False)

            elif controlID == 22:
                # VIEW AS BUTTON
                self.settings["viewmode"] = (1, 0)[self.settings["viewmode"]]
                xbmc.sleep(50)
                self.setContainer(filter, SelectId)

            elif controlID == 13:
                # SORT BY BUTTON
                self.settings["sortmethod"] = (1,
                                               0)[self.settings["sortmethod"]]
                self.setSortMethodControl()
                self.setContainer(filter, SelectId)

            elif controlID == 14:
                # SORT ASC BUTTON
                self.settings["sortorder"] = (1, 0)[self.settings["sortorder"]]
                self.setContainer(filter, SelectId)

            elif controlID == 32:
                # SETTINGS BUTTON
                self.Addon = Addon(AddonId)
                self.Addon.openSettings()
                xbmc.sleep(10)
                if self.settings["LanguagePath"] != self.Addon.getSetting(
                        "LanguagePath"):
                    self.settings["LanguagePath"] = self.Addon.getSetting(
                        "LanguagePath")
                    self.listitems = []
                self.setContainer(filter, SelectId)

            elif controlID == 33:
                # FIND BUTTON
                default = self.getControl(33).getLabel2()
                kb = xbmc.Keyboard(default, "Find what ...", False)
                kb.doModal()
                if kb.isConfirmed():
                    find_text = kb.getText()
                    #self.getControl( 33 ).setLabel( "Find", label2=find_text )
                    self.setProperty("FindText", find_text)
                    if find_text:  # and find_text != default:
                        for count, li in enumerate(self.listitems):
                            #l_text = find_text.lower()
                            #match = ( l_text in li.getLabel().lower() ) or ( l_text in li.getLabel2().lower() ) or ( l_text == li.getProperty( "id" ) )
                            #match = match or ( l_text == li.getLabel().lower() ) or ( l_text == li.getLabel2().lower() )
                            #if not match: continue
                            if self.findText(find_text, li):
                                self.getControl(
                                    self.ContainerId).selectItem(count)
                                self.setFocusId(self.ContainerId)
                                break

            elif controlID == 34:
                # FIND NEXT BUTTON
                find_next = self.getControl(33).getLabel2().encode("utf-8")
                pos = self.getControl(self.ContainerId).getSelectedPosition()
                for count, li in enumerate(self.listitems):
                    if count <= pos: continue
                    #if find_next in li.getLabel() or find_next == li.getProperty( "id" ):
                    if self.findText(find_next, li):
                        self.getControl(self.ContainerId).selectItem(count)
                        break

        except:
            print_exc()

    def findText(self, text, listitem):
        return re.search(
            text.lower(), "|".join([
                listitem.getLabel(),
                listitem.getLabel2(),
                listitem.getProperty("id")
            ]).lower())

    def onAction(self, action):
        if action in [9, 10]:
            self._close_window()

        elif action == 117:
            try:
                cm = DialogContextMenu("Translator-DialogContextMenu.xml",
                                       CWD,
                                       parent=self)
                cm.doModal()
                del cm
            except:
                print_exc()
        else:
            try:
                bcode = action.getButtonCode()
                # keyboard press F3
                if bcode == 127138: self.sendClick(34)
                #
            except:
                print_exc()

    def _close_window(self):
        xbmc.executebuiltin("ActivateWindow(busydialog)")
        if self.settings["savefolderviews"]:
            self.Addon.setSetting("viewmode", str(self.settings["viewmode"]))
            self.Addon.setSetting("sortmethod",
                                  str(self.settings["sortmethod"]))
            self.Addon.setSetting("sortorder", str(self.settings["sortorder"]))
            xbmc.sleep(10)

        if self.IsModified:
            # ask for save change
            xbmc.executebuiltin("Dialog.Close(busydialog)")
            self._save_change()

        try:
            del self.language
        except:
            pass
        self.close()

    def _save_change(self):
        if xbmcgui.Dialog().yesno("Confirm file save",
                                  "Language file has been changed!",
                                  self.language.current_xml,
                                  "Do you want save your change?", ""):
            xbmc.executebuiltin("ActivateWindow(busydialog)")
            OK = self.language.save_strings()
            xbmc.executebuiltin("Dialog.Close(busydialog)")

            if (self.DefaultFolderLanguage.rstrip("/") == self.FolderLanguage
                ) or (xbmc.translatePath("special://skin/")
                      in xbmc.translatePath(self.FolderLanguage)):
                # if default xbmc language file has been changed,
                # set True, XBMC require Restart or reload language
                self.RestartXBMC_ReloadLanguage = OK or self.RestartXBMC_ReloadLanguage
class NetflixCommon(object):
    """
    Stuff shared between / used from service and addon"""

    def __init__(self, plugin_handle, base_url):

        self.addon = Addon()
        self.data_path = xbmc.translatePath(self.addon.getAddonInfo('profile'))
        self.cookie_path = self.data_path + 'COOKIE'
        self.plugin = self.addon.getAddonInfo('name')
        self.verb_log = self.addon.getSetting('logging') == 'true'
        self.plugin_handle = plugin_handle
        self.base_url = base_url
        self.version = self.addon.getAddonInfo('version')

        xbmcvfs.mkdir(path=self.data_path)

    def get_addon(self):
        """Return the current addon instance"""
        return self.addon

    def get_addon_info(self, name):
        """Return the current addon instance"""
        return self.addon.getAddonInfo(name)

    def set_setting(self, key, value):
        return self.addon.setSetting(key, value)

    def get_setting(self, key):
        return self.addon.getSetting(key)

    def flush_settings(self):
        self.addon = Addon()

    def get_esn(self):
        """
        Returns the esn from settings
        """
        return self.addon.getSetting('esn')

    def set_esn(self, esn):
        """
        Returns True if MSL reset is required
        """
        stored_esn = self.get_esn()
        if not stored_esn and esn:
            self.set_setting('esn', esn)
            return True
        return False

    def get_credentials(self):
        from NetflixCredentials import NetflixCredentials
        email = self.get_setting('email')
        password = self.get_setting('password')

        if '@' in email:
            self.set_credentials(email, password)
            return {'email' : email, 'password' : password }

        return NetflixCredentials().decode_credentials(email, password)

    def set_credentials(self, email, password):
        from NetflixCredentials import NetflixCredentials
        encoded = NetflixCredentials().encode_credentials(email, password)
        self.set_setting('email',encoded['email'])
        self.set_setting('password',encoded['password'])

    def log(self, msg, level=xbmc.LOGDEBUG):
        """Adds a log entry to the Kodi log

        Parameters
        ----------
        msg : :obj:`str`
            Entry that should be turned into a list item

        level : :obj:`int`
            Kodi log level
        """
        if isinstance(msg, unicode):
            msg = msg.encode('utf-8')
        xbmc.log('[%s] %s' % (self.plugin, msg.__str__()), level)

    @staticmethod
    def check_folder_path(path):
        """
        Check if folderpath ends with path delimator
        If not correct it (makes sure xbmcvfs.exists is working correct)
        """
        if isinstance(path, unicode):
            check = path.encode('ascii', 'ignore')
            if '/' in check and not str(check).endswith('/'):
                end = u'/'
                path = path + end
                return path
            if '\\' in check and not str(check).endswith('\\'):
                end = u'\\'
                path = path + end
                return path
        if '/' in path and not str(path).endswith('/'):
            path = path + '/'
            return path
        if '\\' in path and not str(path).endswith('\\'):
            path = path + '\\'
            return path

    @staticmethod
    def file_exists(data_path, filename):
        """
        Checks if a given file exists
        :param filename: The filename
        :return: True if so
        """
        return xbmcvfs.exists(path=data_path + filename)

    @staticmethod
    def save_file(data_path, filename, content):
        """
        Saves the given content under given filename
        :param filename: The filename
        :param content: The content of the file
        """

        file_handle = xbmcvfs.File(
            filepath=data_path + filename,
            mode='w')
        file_content = file_handle.write(content)
        file_handle.close()

    @staticmethod
    def load_file(data_path, filename):
        """
        Loads the content of a given filename
        :param filename: The file to load
        :return: The content of the file
        """
        file_handle = xbmcvfs.File(
            filepath=data_path + filename)
        file_content = file_handle.read()
        file_handle.close()
        return file_content

    @staticmethod
    def list_dir(data_path):
        return xbmcvfs.listdir(data_path)
Exemple #52
0
# Si elle est visible faut la fermer avant toutes modifs,
# sinon toute modification sera annuler lors de la fermeture du content settings!!!
if ContentSettingsIsVisible:
    xbmc.executebuiltin( "Dialog.Close(contentsettings)" )
    xbmc.executebuiltin( "Dialog.Close(addonsettings)" )
    CloseDialogs = True
    xbmc.sleep( 800 )


# get scraper object
AddonId = "metadata.cine.passion-xbmc.org"

Addon   = Addon( AddonId )

# set variables
login = Addon.getSetting( "username" )

passw = Addon.getSetting( "password" )

if settingId == "username":
    default = login
    heading = 30003
    hidden  = False
elif settingId == "password":
    default = passw
    heading = 30004
    hidden  = True

# condition pour la compatibiliter, si aucun token n'est trouve cela veut surement dire que c'est une vielle version du scraper
hasToken = ( bool( Addon.getSetting( "token" ) ) == bool( Addon.getSetting( "tokenb64" ) ) == True )
Exemple #53
0
                except IOError as ioe:
                    log("removing unresponsive light %s" % light.label, level=LOGWARNING)
                    unresponsive.append(light)
            for light in unresponsive:
                del self.lights[light]

def log(msg, level=LOGNOTICE):
    xbmc.log("lifxbmc - %s" % msg.replace("\0", ""), level=level) # strings returned from lights sometimes have null chars

if __name__ == '__main__':
    monitor = Monitor()
    player = LifxPlayer()
    
    log("inited")    
     
    while not monitor.abortRequested():
        if monitor.waitForAbort(10):
            break
        
        try:
            lifx = LifxLAN()
            for light, color in lifx.get_color_all_lights():
                if len(addon.getSetting("group_filter")) > 0:
                    pass
                if light not in player:
                    log("discovered new light %s" % light.get_label())
                    player.add_light(light, color)
        except Exception as e:
            log("Exception while discovering lights: %s" % e, level=LOGERROR)

Exemple #54
0
    log (u"pluginHandle: " + repr(pluginHandle), xbmc.LOGDEBUG)
    provider = VineProvider()
    provider.initialise(httpManager, sys.argv[0], pluginHandle)
    success = provider.ExecuteCommand(mycgi)
    log (u"executeCommand done", xbmc.LOGDEBUG)
            
    return success


if __name__ == "__main__":

        try:
            log (u"Name: %s, Version: %s" % (name, version), xbmc.LOGDEBUG)

            if addon.getSetting('http_cache_disable_adv') == 'false':
                httpManager.SetCacheDir( CACHE_FOLDER )
    
            InitTimeout()
        
            # Each command processes a web page
            # Get the web page from the cache if it's there
            # If there is an error when processing the web page from the cache
            # we want to try again, this time getting the page from the web
            httpManager.setGetFromCache(True)
            success = executeCommand()            
    
            xbmc.log(u"success: %s, getGotFromCache(): %s" % (unicode(success), unicode(httpManager.getGotFromCache())), xbmc.LOGDEBUG)
            
            if success is not None and success == False and httpManager.getGotFromCache() == True:
                httpManager.setGetFromCache(False)
Exemple #55
0
                    self.container_all_movies.reset()
                    self.setFocusId( self.CONTAINER_MOVIESETS_ID )
                else:
                    self._close_dialog()
            except:
                LOGGER.error.exc_info( sys.exc_info(), self )
                self._close_dialog()

    def _close_dialog( self ):
        self.close()
        xbmc.sleep( 600 )



if ( __name__ == "__main__" ):
    mtime = sum( [ os.path.getmtime( db ) for db in DB_PATHS ] )

    w = Manager( "script-MovieSets-Manager.xml", ADDON_DIR )
    w.doModal()
    del w

    if ADDON.getSetting( "exporting" ) == "true" and sum( [ os.path.getmtime( db ) for db in DB_PATHS ] ) > mtime:
        if xbmcgui.Dialog().yesno( "Movie Sets changed...", "If you want save your change in NFO files.", LangXBMC( 647 ), "", LangXBMC( 222 ), LangXBMC( 650 ) ):
            xbmc.executebuiltin( "ActivateWindow(VideosSettings)" )
            # set Library button
            xbmc.executebuiltin( "SetFocus(-100)" )
            # set Export video library button
            xbmc.executebuiltin( "SetFocus(-73)" )
            # select Export video library
            xbmc.executebuiltin( "Action(Select)" )
Exemple #56
0
    # 6- emptying pending file
    # 7- change last sync date
    # 8- write back data
    #


def getFolders():
    global watched_db, watched_pending_db
    watched_pending_db = os.path.join(
        ADDON_CACHE,
        "watched_pending_" + str(ADDON.getSetting("username")) + ".db")
    watched_db = os.path.join(
        ADDON_CACHE, "watched_" + str(ADDON.getSetting("username")) + ".db")


if not ADDON.getSetting("setupOK"):
    ADDON.openSettings()
    ADDON.setSetting("setupOK", "True")


def getPendingWatchFile():
    global watched_db, watched_pending_db

    if os.path.exists(watched_pending_db):
        pendWatched = open(watched_pending_db).read()
    else:
        f = open(watched_pending_db, "w")
        f.write("{}")
        f.close()
        pendWatched = "{}"
Exemple #57
0
class Translator( xbmcgui.WindowXML ):
    CONTROL_LIST_A = 50

    def __init__( self, *args, **kwargs ):
        self.RestartXBMC_ReloadLanguage = False
        self.IsModified = False
        self.googleTrans = False
        self.listitems = []

        self.Addon = Addon( AddonId )
        self._get_settings()

    def _get_settings( self ):
        self.settings = {}
        self.settings[ "LanguagePath" ] = self.Addon.getSetting( "LanguagePath" )

        self.settings[ "viewmode" ]     = int( self.Addon.getSetting( "viewmode" ) )
        self.settings[ "sortmethod" ]   = int( self.Addon.getSetting( "sortmethod" ) )
        self.settings[ "sortorder" ]    = int( self.Addon.getSetting( "sortorder" ) )
        self.settings[ "savefolderviews" ] = ( self.Addon.getSetting( "savefolderviews" ) == "true" )

    def setListItems( self ):
        self.DefaultLanguage = "English"
        self.CurrentLanguage = xbmc.getLanguage()
        self.FolderLanguage  = self.settings[ "LanguagePath" ]
        self.DefaultFolderLanguage = "special://xbmc/language/"
        if not os.path.exists( xbmc.translatePath( self.FolderLanguage ) ):
            print "Folder language not exists! '%s'" % self.FolderLanguage
            self.FolderLanguage = self.DefaultFolderLanguage

        if not self.FolderLanguage.startswith( "special" ):
            for folder in [ "profile", "home", "xbmc" ]:
                special = "special://%s/" % folder
                self.FolderLanguage = self.FolderLanguage.replace( xbmc.translatePath( special ), special )

        if ( xbmc.translatePath( "special://skin/" ) in xbmc.translatePath( self.FolderLanguage ) ):
            self.FolderLanguage = "special://skin/language/"
        self.FolderLanguage = self.FolderLanguage.replace( "\\", "/" ).rstrip( "/" )

        self.setContainerProperties()
        # get languages source
        self.language = Language( self )
        self.listitems = self.language.listitems

    def onInit( self ):
        xbmc.executebuiltin( "ActivateWindow(busydialog)" )
        self.setSortMethodControl()
        self.setContainer( setviewmode=self.settings[ "viewmode" ] )
        LOG( "notice", "initialized took %s", time_took( START_TIME ) )
        xbmc.executebuiltin( "Dialog.Close(busydialog)" )

    def setSortMethodControl( self ):
        label = ( 20316, 103 )[ self.settings[ "sortmethod" ] ]
        self.getControl( 13 ).setLabel( xbmc.getLocalizedString( label ) )

    def setContainerProperties( self ):
        self.setProperty( "IsModified", ( "", "Language file has been changed!" )[ self.IsModified ] )
        self.setProperty( "CurrentLanguage", self.CurrentLanguage )
        self.setProperty( "FolderLanguage", self.FolderLanguage )
        self.setProperty( "CurrentEnglishString", "" )
        self.Addon = Addon( AddonId )
        self.setProperty( "ExtraKeyboard_TopOrBottom", ( "top", "bottom" )[ int( self.Addon.getSetting( "ExtraKB" ) ) ] )

    def setContainer( self, filter="", SelectId="", setviewmode=None ):
        if setviewmode is not None:
            self.ContainerId = ( 50, 51 )[ setviewmode ]
            if setviewmode: xbmc.executebuiltin( "SendClick(2)" )
        else:
            self.ContainerId = ( 50, 51 )[ xbmc.getCondVisibility( "Control.IsVisible(51)" ) ]
        try:

            if not bool( self.listitems ):
                if self.IsModified:
                    # ask for save change
                    self._save_change()
                self.IsModified = False
                self.googleTrans = False
                self.getControl( self.ContainerId ).reset()
                self.setListItems()

            self.setContainerProperties()
            if self.listitems:
                selectitem = 0

                additems = []
                if not filter:
                    additems = self.listitems
                else:
                    for li in self.listitems:
                        if filter == "UnTranslated" and li.getProperty( "UnTranslated" ) == "false":
                            continue
                        if filter == "Translated" and li.getProperty( "IsModified" ) != "true":
                            continue
                        additems.append( li )

                if additems:
                    if self.settings[ "sortmethod" ]:
                        additems = sorted( additems, key=lambda li: normalize_string( li.getLabel(), True ) )
                    if self.settings[ "sortorder" ]:
                        additems = list( reversed( additems ) )
                    for count, li in enumerate( additems ):
                        if li.getProperty( "id" ) == SelectId:
                            selectitem = count

                # add listitems
                self.getControl( self.ContainerId ).reset()
                self.getControl( self.ContainerId ).addItems( additems )
                if additems: #self.getControl( self.ContainerId ).size():
                    self.getControl( self.ContainerId ).selectItem( selectitem )
                    self.setFocusId( self.ContainerId )

            # fixe view on xbox
            if UNDER_XBOX and setviewmode is not None:
                xbmc.executebuiltin( "Container.SetViewMode(%i)" % self.ContainerId )
                xbmc.sleep( 20 )
                self.setFocusId( self.ContainerId )
        except:
            print_exc()

    def onFocus( self, controlID ):
        pass

    def sendClick( self, controlID ):
        try: self.onClick( controlID )
        except: print_exc()

    def getTranslate( self, text, minimal=2 ):
        translated = ""
        if text:
            if ( len( text ) <= minimal ) or text.isdigit():
                translated = text
            else:
                country = self.Addon.getSetting( "country" )
                if country.lower() == "auto": country = self.CurrentLanguage
                pDialog = xbmcgui.DialogProgress()
                pDialog.create( "Google Translate", "English to %s" % country, text, "Please wait..." )
                try:
                    import LanguageTools
                    translated = LanguageTools.translate_text( text, country, "google" )
                except:
                    print_exc()
        self.googleTrans = False
        xbmc.executebuiltin( "Dialog.Close(progressdialog)" )
        return translated

    def onClick( self, controlID ):
        try:
            self.ContainerId = ( 50, 51 )[ xbmc.getCondVisibility( "Control.IsVisible(51)" ) ]
            if controlID == self.ContainerId:
                # get clicked listitem
                listitem = self.getControl( self.ContainerId ).getSelectedItem()
                # get position
                pos = int( listitem.getProperty( "Position" ) )
                # get id
                id = listitem.getProperty( "id" )
                if id:
                    CurrentEnglishString = fixe_line_return( listitem.getLabel2(), True )
                    
                    DefaultText = fixe_line_return( listitem.getLabel(), True )
                    old_text = DefaultText
                    if self.googleTrans: old_text = self.getTranslate( CurrentEnglishString )
                    old_text = old_text or DefaultText

                    if ( self.Addon.getSetting( "BoldKB" ) == "true" ):
                        CurrentEnglishString = "[B]%s[/B]" % CurrentEnglishString
                    self.setProperty( "CurrentEnglishString", CurrentEnglishString )
                    self.setProperty( "ShowCurrentEnglishString", "true" )
                    
                    kb = xbmc.Keyboard( old_text, self.CurrentLanguage + " (Enter desired string)", False )
                    kb.doModal()
                    if kb.isConfirmed():
                        new_text = kb.getText()
                        if new_text != DefaultText:
                            new_text = fixe_line_return( new_text )
                            self.listitems[ pos ].setLabel( new_text )
                            self.listitems[ pos ].setProperty( "IsModified", "true" )
                            self.setProperty( "IsModified", "Language file has been changed!" )
                            self.IsModified = True
                    self.setProperty( "ShowCurrentEnglishString", "" )

            # PAS TRES BON COMME FILTRE :(
            UnTranslated = self.getControl( 19 ).isSelected()
            Translated = self.getControl( 20 ).isSelected()
            Changed = self.getControl( 21 ).isSelected()
            filter = ( "", "UnTranslated" )[ UnTranslated ]
            filter = ( filter, "Translated" )[ Translated ]
            filter = ( filter, "Changed" )[ Changed ]
            
            # get selected id for selectitem again, if controlID 22 clicked
            SelectId = xbmc.getInfoLabel( "Container(50).ListItem.Property(id)" ) or xbmc.getInfoLabel( "Container(51).ListItem.Property(id)" )
            if controlID == 19:
                # UNTRANSLATED BUTTON
                filter = ( "", "UnTranslated" )[ UnTranslated ]
                self.setContainer( filter, SelectId )
                self.getControl( 19 ).setSelected( UnTranslated )
                self.getControl( 20 ).setSelected( False )
                self.getControl( 21 ).setSelected( False )

            elif controlID == 20:
                # TRANSLATED BUTTON
                filter = ( "", "Translated" )[ Translated ]
                self.setContainer( filter, SelectId )
                self.getControl( 20 ).setSelected( Translated )
                self.getControl( 19 ).setSelected( False )
                self.getControl( 21 ).setSelected( False )

            elif controlID == 21:
                # CHANGED BUTTON
                filter = ( "", "Changed" )[ Changed ]
                self.setContainer( filter, SelectId )
                self.getControl( 21 ).setSelected( Changed )
                self.getControl( 19 ).setSelected( False )
                self.getControl( 20 ).setSelected( False )

            elif controlID == 22:
                # VIEW AS BUTTON
                self.settings[ "viewmode" ] = ( 1, 0 )[ self.settings[ "viewmode" ] ]
                xbmc.sleep( 50 )
                self.setContainer( filter, SelectId )

            elif controlID == 13:
                # SORT BY BUTTON
                self.settings[ "sortmethod" ] = ( 1, 0 )[ self.settings[ "sortmethod" ] ]
                self.setSortMethodControl()
                self.setContainer( filter, SelectId )

            elif controlID == 14:
                # SORT ASC BUTTON
                self.settings[ "sortorder" ] = ( 1, 0 )[ self.settings[ "sortorder" ] ]
                self.setContainer( filter, SelectId )

            elif controlID == 32:
                # SETTINGS BUTTON
                self.Addon = Addon( AddonId )
                self.Addon.openSettings()
                xbmc.sleep( 10 )
                if self.settings[ "LanguagePath" ] != self.Addon.getSetting( "LanguagePath" ):
                    self.settings[ "LanguagePath" ] = self.Addon.getSetting( "LanguagePath" )
                    self.listitems = []
                self.setContainer( filter, SelectId )

            elif controlID == 33:
                # FIND BUTTON
                default = self.getControl( 33 ).getLabel2()
                kb = xbmc.Keyboard( default, "Find what ...", False )
                kb.doModal()
                if kb.isConfirmed():
                    find_text = kb.getText()
                    #self.getControl( 33 ).setLabel( "Find", label2=find_text )
                    self.setProperty( "FindText", find_text )
                    if find_text:# and find_text != default:
                        for count, li in enumerate( self.listitems ):
                            #l_text = find_text.lower()
                            #match = ( l_text in li.getLabel().lower() ) or ( l_text in li.getLabel2().lower() ) or ( l_text == li.getProperty( "id" ) )
                            #match = match or ( l_text == li.getLabel().lower() ) or ( l_text == li.getLabel2().lower() )
                            #if not match: continue
                            if self.findText( find_text, li ):
                                self.getControl( self.ContainerId ).selectItem( count )
                                self.setFocusId( self.ContainerId )
                                break

            elif controlID == 34:
                # FIND NEXT BUTTON
                find_next = self.getControl( 33 ).getLabel2().encode( "utf-8" )
                pos = self.getControl( self.ContainerId ).getSelectedPosition()
                for count, li in enumerate( self.listitems ):
                    if count <= pos: continue
                    #if find_next in li.getLabel() or find_next == li.getProperty( "id" ):
                    if self.findText( find_next, li ):
                        self.getControl( self.ContainerId ).selectItem( count )
                        break

        except:
            print_exc()

    def findText( self, text, listitem ):
        return re.search( text.lower(), "|".join(
            [ listitem.getLabel(), listitem.getLabel2(), listitem.getProperty( "id" ) ]
            ).lower() )

    def onAction( self, action ):
        if action in [ 9, 10 ]:
            self._close_window()

        elif action == 117:
            try:
                cm = DialogContextMenu( "Translator-DialogContextMenu.xml", CWD, parent=self )
                cm.doModal()
                del cm
            except:
                print_exc()
        else:
            try:
                bcode = action.getButtonCode()
                # keyboard press F3
                if bcode == 127138: self.sendClick( 34 )
                #
            except:
                print_exc()

    def _close_window( self ):
        xbmc.executebuiltin( "ActivateWindow(busydialog)" )
        if self.settings[ "savefolderviews" ]:
            self.Addon.setSetting( "viewmode",   str( self.settings[ "viewmode" ] ) )
            self.Addon.setSetting( "sortmethod", str( self.settings[ "sortmethod" ] ) )
            self.Addon.setSetting( "sortorder",  str( self.settings[ "sortorder" ] ) )
            xbmc.sleep( 10 )

        if self.IsModified:
            # ask for save change
            xbmc.executebuiltin( "Dialog.Close(busydialog)" )
            self._save_change()

        try: del self.language
        except: pass
        self.close()

    def _save_change( self ):
        if xbmcgui.Dialog().yesno( "Confirm file save", "Language file has been changed!", self.language.current_xml, "Do you want save your change?", "" ):
            xbmc.executebuiltin( "ActivateWindow(busydialog)" )
            OK = self.language.save_strings()
            xbmc.executebuiltin( "Dialog.Close(busydialog)" )

            if ( self.DefaultFolderLanguage.rstrip( "/" ) == self.FolderLanguage ) or ( xbmc.translatePath( "special://skin/" ) in xbmc.translatePath( self.FolderLanguage ) ):
                # if default xbmc language file has been changed,
                # set True, XBMC require Restart or reload language
                self.RestartXBMC_ReloadLanguage = OK or self.RestartXBMC_ReloadLanguage
Exemple #58
0
    xmlPath = os.path.join( xmlUserDir, xmlName )
    #Parse xml file
    document = xml.dom.minidom.parse(xmlPath)
    
    for item in document.getElementsByTagName('fav'):
      name = item.getElementsByTagName('title')[0].firstChild.data
      url = item.getElementsByTagName('link')[0].firstChild.data
      imgPath = item.getElementsByTagName('image')[0].firstChild.data
      thumbnail = "%s.jpg" % imgPath
      thumbnail = os.path.join(imgUserDir, thumbnail)
      addLink(name.encode("utf-8"),url,thumbnail,imgPath)


#INIT
#Init Parameter       
if __settings__.getSetting('cmdline') == "" and __settings__.getSetting('path') == "":
    pass #__settings__.openSettings(url=sys.argv[0])
elif __settings__.getSetting('cmdline') != "" :
    cmd = __settings__.getSetting('cmdline')
else:
    cmd = __settings__.getSetting('path')
#Variable           
params = get_params()
url = None
name = None
mode = None
#Language
TextLanguage = __language__

#Recup Parameter 
try: