示例#1
0
 def startDebugging(self):
     active = False
     #Eric4
     try:
         from dbg_client.DebugClient import DebugClient
         DBG = DebugClient()
         DBG.startDebugger(host='localhost',
                           filename='',
                           port=42424,
                           exceptions=True,
                           enableTrace=True,
                           redirect=True)
         active = True
         self._statusBar().showMessage(u"Eric4 debugging active")
     except:
         pass
     #PyDev (Eclipse)
     try:
         from pysrc import pydevd
         pydevd.settrace(port=5678, suspend=False)
         active = True
         self._statusBar().showMessage(u"PyDev debugging active")
     except:
         pass
     if not active:
         self._statusBar().showMessage(u"Debugging connection failed")
示例#2
0
def init():
    # append pydev remote debugger
    if globalvar.REMOTE_DBG:
        # Make pydev debugger works for auto reload.
        # Note pydevd module need to be copied in XBMC\system\python\Lib\pysrc
        try:
            import pysrc.pydevd as pydevd
        # stdoutToServer and stderrToServer redirect stdout and stderr to eclipse console
            pydevd.settrace('localhost', stdoutToServer=True, stderrToServer=True)
        except ImportError:
            sys.stderr.write("Error: " +
                "You must add org.python.pydev.debug.pysrc to your PYTHONPATH.")

    
    globalvar.channels = [
            [0, 'favourites', 'Favourites', favourites],
            [1, 'cplus', 'Canal +', cplus],
            [2, 'france1', 'France 1ere', pluzz],
            [3, 'france2', 'France 2', pluzz],
            [4, 'france3', 'France 3', pluzz],
            [5, 'france4', 'France 4', pluzz],
            [6, 'france5', 'France 5', pluzz],
            [7, 'franceO', 'France O', pluzz],
            [8, 'arte', 'Arte', arte],
            [9, 'gulli', 'Gulli', gulli]
            ]    
示例#3
0
def start():
    pydevd.settrace('localhost',
                    stdoutToServer=True,
                    stderrToServer=True,
                    suspend=False)
    #pydevd.settrace('192.168.1.10', stdoutToServer=True, stderrToServer=True, suspend=False)
    #pydevd.settrace('192.168.1.10')

    logging.basicConfig(level=logging.DEBUG)
示例#4
0
 def startPyDevClient(self):
     started = False
     try:
         from pysrc import pydevd
         pydevd.settrace(port=5678, suspend=False)
         started = True
         self._statusBar().showMessage(u"PyDev debugging active")
     except:
         pass
     return started
示例#5
0
 def startPyDevClient(self):
     started = False
     try:
         from pysrc import pydevd
         pydevd.settrace(port=5678, suspend=False)
         started = True
         self._statusBar().showMessage(u"PyDev debugging active")
     except:
         pass
     return started
示例#6
0
文件: util.py 项目: alshain/xbmc-sftv
def debug():
    #http://wiki.xbmc.org/index.php?title=HOW-TO_debug_Python_Scripts_with_Eclipse
    # Make pydev debugger works for auto reload.
    # Note pydevd module need to be copied in XBMC\system\python\Lib\pysrc
    print sys.path
    try:
        from pysrc import pydevd
    # stdoutToServer and stderrToServer redirect stdout and stderr to eclipse console
        pydevd.settrace('localhost', stdoutToServer = True, stderrToServer = True)
    except ImportError:
        sys.stderr.write("Error: " +
            "You must add org.python.pydev.debug.pysrc to your PYTHONPATH.")
        sys.exit(1)
 def debug(self):
     
     if REMOTE_DBG:
             # Make pydev debugger works for auto reload.
             # Note pydevd module need to be copied in XBMC\system\python\Lib\pysrc
         try:
             import pysrc.pydevd as pydevd
             # stdoutToServer and stderrToServer redirect stdout and stderr to eclipse console
             pydevd.settrace('localhost', port=5678, stdoutToServer=True, stderrToServer=True)
         except ImportError:
             sys.stderr.write("Error: " +
                     "You must add org.python.pydev.debug.pysrc to your PYTHONPATH.")
             sys.exit(1)         
     
     return
示例#8
0
def debugger():
    try:

        remote_debugger = settings.getSetting('remote_debugger')
        remote_debugger_host = settings.getSetting('remote_debugger_host')

        # append pydev remote debugger
        if remote_debugger == 'true':
            # Make pydev debugger works for auto reload.
            # Note pydevd module need to be copied in XBMC\system\python\Lib\pysrc
            import pysrc.pydevd as pydevd
            # stdoutToServer and stderrToServer redirect stdout and stderr to eclipse console
            pydevd.settrace(remote_debugger_host, stdoutToServer=True, stderrToServer=True)
    except ImportError:
        xbmc.log(addon.getLocalizedString(30016), xbmc.LOGERROR)
        sys.exit(1)
    except :
        pass
def debugger():
    try:

        remote_debugger = settings.getSetting('remote_debugger')
        remote_debugger_host = settings.getSetting('remote_debugger_host')

        # append pydev remote debugger
        if remote_debugger == 'true':
            # Make pydev debugger works for auto reload.
            # Note pydevd module need to be copied in XBMC\system\python\Lib\pysrc
            import pysrc.pydevd as pydevd
            # stdoutToServer and stderrToServer redirect stdout and stderr to eclipse console
            pydevd.settrace(remote_debugger_host, stdoutToServer=True, stderrToServer=True)
    except ImportError:
        xbmc.log(addon.getLocalizedString(30016), xbmc.LOGERROR)
        sys.exit(1)
    except :
        pass
 def __init__(self, debug = True):
     '''
     Constructor
     '''
     if debug:
         # Make pydev debugger works for auto reload.
         # Note pydevd module need to be copied in XBMC\system\python\Lib\pysrc
         try:
             from pysrc import pydevd;  
         except:
             sys.stderr.write("Error: " +
                 "You must add org.python.pydev.debug.pysrc to your PYTHONPATH.");
             return;
         
         try:
             pydevd.settrace("localhost", stdoutToServer=True, stderrToServer=True, suspend=True);
         except:
             sys.stderr.write("Error: " +
                 "You must add org.python.pydev.debug.pysrc to your PYTHONPATH.");
             return;
示例#11
0
 def startDebugging(self):
     active = False
     #Eric4
     try:
         from dbg_client.DebugClient import DebugClient
         DBG=DebugClient()
         DBG.startDebugger(host='localhost', filename='', port=42424, exceptions=True, enableTrace=True, redirect=True)
         active = True
         self._statusBar().showMessage(u"Eric4 debugging active")
     except:
         pass
     #PyDev (Eclipse)
     try:
         from pysrc import pydevd
         pydevd.settrace(port=5678, suspend=False)
         active = True
         self._statusBar().showMessage(u"PyDev debugging active")
     except:
         pass
     if not active:
         self._statusBar().showMessage(u"Debugging connection failed")
示例#12
0
#from resources.lib import tvWindow


#debugging
try:

    remote_debugger = addon.getSetting('remote_debugger')
    remote_debugger_host = addon.getSetting('remote_debugger_host')

    # append pydev remote debugger
    if remote_debugger == 'true':
        # Make pydev debugger works for auto reload.
        # Note pydevd module need to be copied in XBMC\system\python\Lib\pysrc
        import pysrc.pydevd as pydevd
        # stdoutToServer and stderrToServer redirect stdout and stderr to eclipse console
        pydevd.settrace(remote_debugger_host, stdoutToServer=True, stderrToServer=True)
except ImportError:
    log(addon.getLocalizedString(30016), True)
    sys.exit(1)
except :
    pass


# retrieve settings
user_agent = addon.getSetting('user_agent')


mode = plugin_queries['mode']

# make mode case-insensitive
mode = mode.lower()
示例#13
0
文件: default.py 项目: videoprsnsa/ru
import logging

import xbmc, xbmcaddon, xbmcgui, xbmcplugin

from bs4 import BeautifulSoup as bs

REMOTE_DBG = False

# append pydev remote debugger
if REMOTE_DBG:
    # Make pydev debugger works for auto reload.
    # Note pydevd module need to be copied in XBMC\system\python\Lib\pysrc
    try:
        import pysrc.pydevd as pydevd  # with the addon script.module.pydevd, only use `import pydevd`
        # stdoutToServer and stderrToServer redirect stdout and stderr to eclipse console
        pydevd.settrace('localhost', stdoutToServer=True, stderrToServer=True)
    except ImportError:
        sys.stderr.write(
            "Error: " +
            "You must add org.python.pydev.debug.pysrc to your PYTHONPATH.")
        sys.exit(1)

__settings__ = xbmcaddon.Addon(id='plugin.video.zoomby.ru')
h = int(sys.argv[1])

xbmcplugin.setContent(h, 'movies')

plugin_path = __settings__.getAddonInfo('path').replace(';', '')
plugin_icon = xbmc.translatePath(os.path.join(plugin_path, 'icon.png'))
context_path = xbmc.translatePath(os.path.join(plugin_path, 'default.py'))
示例#14
0
class gPlayer(xbmc.Player):

    try:

        import pysrc.pydevd as pydevd
        # stdoutToServer and stderrToServer redirect stdout and stderr to eclipse console
        pydevd.settrace('localhost', stdoutToServer=True, stderrToServer=True)
    except:
        pass

    def __init__(self, *args, **kwargs):
        xbmc.Player.__init__(self)
        self.isExit = 0
        self.seek = 0

    def setScheduler(self, scheduler):
        self.tvScheduler = scheduler

    def setWorksheet(self, worksheet):
        self.worksheet = worksheet

    def setContent(self, episodes):
        self.content = episodes
        self.current = 0

    def next(self):

        #            log('video ' + str(episodes[self.current][CONSTANTS.D_SOURCE]) + ',' + str(episodes[self.current][CONSTANTS.D_SHOW]))

        #        addVideo('plugin://plugin.video.gdrive?mode=playvideo&title='+episodes[video][0],
        #                             { 'title' : str(episodes[video][CONSTANTS.D_SHOW]) + ' - S' + str(episodes[video][CONSTANTS.D_SEASON]) + 'xE' + str(episodes[video][CONSTANTS.D_EPISODE]) + ' ' + str(episodes[video][CONSTANTS.D_PART])  , 'plot' : episodes[video][CONSTANTS.D_SHOW] },
        #                             img='None')
        # play video
        #            if self.isExit == 0:
        self.play(
            'plugin://plugin.video.gdrive-testing/?mode=video&instance=' +
            str(self.tvScheduler.service.instanceName) + '&title=' +
            self.content[self.current][0])
        #                self.play(self.content[self.current][0])

        #                self.tvScheduler.setVideoWatched(self.worksheet, self.content[self.current][0])
        if self.current < len(self.content):
            self.current += 1
        else:
            self.current = 0

    def PlayStream(self, url, item, seek):
        self.play(url, item)

        while not self.isPlaying(
        ):  #<== The should be    while self.isPlaying():
            print "LOOP"
            xbmc.sleep(2000)
        xbmc.sleep(2000)
        print "SEEK " + str(seek)
        self.seekTime(seek)

    def onPlayBackStarted(self):
        print "PLAYBACK STARTED"
        if self.seek > 0:
            self.seekTime(self.seek)

    def onPlayBackEnded(self):
        print "PLAYBACK ENDED"
        self.next()

    def onPlayBackStopped(self):
        print "PLAYBACK STOPPED"
        self.isExit = 1
        if self.isExit == 0:
            print "don't exit"

    def onPlayBackPaused(self):
        print "PLAYBACK Paused"
        self.seekTime(10)
示例#15
0
import sys, traceback

# REMOTE DEBUGGING
REMOTE_DBG = False

# append pydev remote debugger
if REMOTE_DBG:
    # Make pydev debugger works for auto reload.
    # Note pydevd module need to be copied in XBMC\system\python\Lib\pysrc
    try:
        import pysrc.pydevd as pydevd
        # stdoutToServer and stderrToServer redirect stdout and stderr to eclipse console
        pydevd.settrace('localhost',
                        stdoutToServer=True,
                        stderrToServer=True,
                        suspend=False)
    except ImportError:
        sys.stderr.write(
            "Error: " +
            "You must add org.python.pydev.debug.pysrc to your PYTHONPATH.")
        sys.exit(1)
    except:
        sys.stderr.write('Remote Debugger is not started')

# ACTUAL ADDON
from lib import main

try:
    myAddon = main.Main()
    myAddon.run(sys.argv)
except:
示例#16
0
class gPlayer(xbmc.Player):

    try:

        import pysrc.pydevd as pydevd
        # stdoutToServer and stderrToServer redirect stdout and stderr to eclipse console
        pydevd.settrace('localhost', stdoutToServer=True, stderrToServer=True)
    except:
        pass

    def __init__(self, *args, **kwargs):
        xbmc.Player.__init__(self)
        self.isExit = False
        self.seek = 0
        self.package = None
        self.time = 0
        self.service = None
        self.current = 1
        self.playStatus = False
        self.currentURL = ''

    def setService(self, service):
        self.service = service

    def setWorksheet(self, worksheet):
        self.worksheet = worksheet

    def setContent(self, episodes):
        self.content = episodes
        self.current = 0

    def setMedia(self, mediaItems):
        self.mediaItems = mediaItems
        self.current = 0

    def next(self):

        #            log('video ' + str(episodes[self.current][CONSTANTS.D_SOURCE]) + ',' + str(episodes[self.current][CONSTANTS.D_SHOW]))

        #        addVideo('plugin://plugin.video.gdrive?mode=playvideo&amp;title='+episodes[video][0],
        #                             { 'title' : str(episodes[video][CONSTANTS.D_SHOW]) + ' - S' + str(episodes[video][CONSTANTS.D_SEASON]) + 'xE' + str(episodes[video][CONSTANTS.D_EPISODE]) + ' ' + str(episodes[video][CONSTANTS.D_PART])  , 'plot' : episodes[video][CONSTANTS.D_SHOW] },
        #                             img='None')
        # play video
        #            if self.isExit == 0:
        self.play(
            'plugin://plugin.video.gdrive-testing/?mode=video&instance=' +
            str(self.service.instanceName) + '&title=' +
            self.content[self.current][0])
        #self.play('plugin://plugin.video.gdrive/?mode=video&instance='+str(self.service.instanceName)+'&title='+self.content[self.current][0])
        #                self.play(self.content[self.current][0])

        #                self.tvScheduler.setVideoWatched(self.worksheet, self.content[self.current][0])
        #                self.tvScheduler.createRow(self.worksheet, '','','','')
        if self.current < len(self.content):
            self.current += 1
        else:
            self.current = 0

    def saveTime(self):
        try:
            newTime = self.getTime()
            if newTime > self.seek:
                self.time = newTime
        except:
            pass

    def PlayStream(self, url, item, seek, startPlayback=True, package=None):

        self.currentURL = url
        if startPlayback:
            self.play(url, item)
            if self.service.settings:
                xbmc.log(
                    self.service.addon.getAddonInfo('name') +
                    ': Playback url ' + str(url), xbmc.LOGNOTICE)

        if package is not None:
            self.package = package

        if seek != '':
            self.seek = float(seek)
            if self.service.settings:
                xbmc.log(
                    self.service.addon.getAddonInfo('name') + ': Seek ' +
                    str(seek), xbmc.LOGNOTICE)

#        self.tvScheduler.setVideoWatched(self.worksheet, self.content[self.current][0])
#        if seek > 0 and seek !='':
#            while not self.isPlaying(): #<== The should be    while self.isPlaying():
#                print "LOOP"
#                xbmc.sleep(500)
#            xbmc.sleep(2000)
#            print "SEEK "+str(seek)
#            self.time = float(seek)
#            self.seekTime(float(seek))

    def playNext(self, service, package):
        (mediaURLs, package) = service.getPlaybackCall(package)

        options = []
        mediaURLs = sorted(mediaURLs)
        for mediaURL in mediaURLs:
            options.append(mediaURL.qualityDesc)
            if mediaURL.qualityDesc == 'original':
                originalURL = mediaURL.url

        playbackURL = ''
        playbackQuality = ''
        playbackPath = ''
        if service.settings.promptQuality:
            if len(options) > 1:
                ret = xbmcgui.Dialog().select(
                    service.addon.getLocalizedString(30033), options)
            else:
                ret = 0
        else:
            ret = 0

        playbackURL = mediaURLs[ret].url
        if self.service.settings:
            xbmc.log(
                self.service.addon.getAddonInfo('name') + ': Play next ' +
                str(playbackURL), xbmc.LOGNOTICE)

        playbackQuality = mediaURLs[ret].quality
        item = xbmcgui.ListItem(package.file.displayTitle(),
                                iconImage=package.file.thumbnail,
                                thumbnailImage=package.file.thumbnail,
                                path=playbackURL + '|' +
                                service.getHeadersEncoded())
        item.setInfo(type="Video", infoLabels={"Title": package.file.title})
        self.PlayStream(playbackURL + '|' + service.getHeadersEncoded(), item,
                        0, package)

    def playList(self, service):
        while self.current < len(self.mediaItems) and not self.isExit:
            self.playNext(service, self.mediaItems[self.current])
            current = self.current
            while current == self.current and not self.isExit:
                xbmc.sleep(3000)

        if self.service.settings:
            xbmc.log(
                self.service.addon.getAddonInfo('name') + ': Exit play list',
                xbmc.LOGNOTICE)

    def onPlayBackSeek(self, offset):
        print "PLAYBACK SEEKED"

    def onPlayBackStarted(self):
        print "PLAYBACK STARTED"
        self.playStatus = True
        #self.tag = xbmc.Player().getVideoInfoTag()
        #        if self.seek > 0:
        #            self.seekTime(self.seek)

        if self.service.settings:
            xbmc.log(
                self.service.addon.getAddonInfo('name') + ': Play started',
                xbmc.LOGNOTICE)

        if self.seek > 0 and self.seek != '':
            #            while not self.isPlaying(): #<== The should be    while self.isPlaying():
            #                print "LOOP"
            #                xbmc.sleep(500)
            #            xbmc.sleep(2000)
            print "SEEK " + str(self.seek)
            self.time = float(self.seek)
            self.seekTime(float(self.seek))
            self.seek = 0
        if self.service.settings:
            xbmc.log(
                self.service.addon.getAddonInfo('name') + ': Seek time ' +
                str(self.seek), xbmc.LOGNOTICE)

        try:

            if (self.service.settings.tv_watch
                    or self.service.settings.movie_watch):

                result = xbmc.executeJSONRPC(
                    '{"jsonrpc": "2.0", "method": "VideoLibrary.GetEpisodes", "params": {  "sort": {"method":"lastplayed"}, "filter": {"field": "title", "operator": "isnot", "value":"1"}, "properties": [  "file"]}, "id": "1"}'
                )
                #fixedTitle = re.escape(re.sub('.strm', '',self.package.file.title))

                fixedTitle = re.escape(
                    urllib.quote_plus(self.package.file.title))

                #fixedTitle = re.escape(re.sub('[','',fixedTitle))
                foundMatch = 0
                #exp = re.search('"episodeid":(\d+), "file":"[^\"]+"', result)
                #for match in re.finditer('"episodeid":(\d+)\,"file"\:".*'+str(fixedTitle)+'\.strm"', result):#, re.S):
                for match in re.finditer(
                        '"episodeid":(\d+)\,"file"\:"[^\"]+' +
                        str(fixedTitle) + '.strm"', result):  #, re.S):
                    #for match in re.finditer('"episodeid":(\d+)\,"file"\:"[^\"]+","label"\:"'+str(fixedTitle)+'"', result):#, re.S):

                    xbmc.log(
                        self.service.addon.getAddonInfo('name') +
                        ': found show ID ' + match.group(1), xbmc.LOGNOTICE)
                    self.package.file.TVID = match.group(1)
                    #xbmc.executeJSONRPC('{"params": {"episodeid": '+str(match.group(1))+', "resume": {"position": '+str(self.time)+', "total":  '+str(self.package.file.duration)+'}}, "jsonrpc": "2.0", "id": "setResumePoint", "method": "VideoLibrary.SetEpisodeDetails"}')
                    #                xbmc.executeJSONRPC('{"params": {"episodeid": '+str(match.group(1))+', "playcount": '+str(self.package.file.playcount+1)+'}, "jsonrpc": "2.0", "id": "setResumePoint", "method": "VideoLibrary.SetEpisodeDetails"}')
                    foundMatch = 1
                    break
                if foundMatch == 0:
                    for match in re.finditer(
                            '"episodeid":(\d+)\,"file"\:"[^\"]+' +
                            str(re.escape(self.package.file.title)) + '.strm"',
                            result):  #, re.S):
                        xbmc.log(
                            self.service.addon.getAddonInfo('name') +
                            ': found show ID ' + match.group(1),
                            xbmc.LOGNOTICE)
                        self.package.file.TVID = match.group(1)
                        #xbmc.executeJSONRPC('{"params": {"episodeid": '+str(match.group(1))+', "resume": {"position": '+str(self.time)+', "total":  '+str(self.package.file.duration)+'}}, "jsonrpc": "2.0", "id": "setResumePoint", "method": "VideoLibrary.SetEpisodeDetails"}')
                        #                xbmc.executeJSONRPC('{"params": {"episodeid": '+str(match.group(1))+', "playcount": '+str(self.package.file.playcount+1)+'}, "jsonrpc": "2.0", "id": "setResumePoint", "method": "VideoLibrary.SetEpisodeDetails"}')
                        foundMatch = 1
                        break

                if self.service.settings and foundMatch == 1:
                    xbmc.log(
                        self.service.addon.getAddonInfo('name') +
                        ': Found local tv db  id=' +
                        str(self.package.file.TVID), xbmc.LOGNOTICE)

                if foundMatch == 0:
                    result = xbmc.executeJSONRPC(
                        '{"jsonrpc": "2.0", "method": "VideoLibrary.GetMovies", "params": {  "sort": {"method":"lastplayed"}, "filter": {"field": "title", "operator": "isnot", "value":"1"}, "properties": [  "file"]}, "id": "1"}'
                    )
                    for match in re.finditer(
                            '"file":"[^\"]+' + str(fixedTitle) +
                            '.strm","label":"[^\"]+","movieid":(\d+)',
                            result):  #, re.S):

                        xbmc.log(
                            self.service.addon.getAddonInfo('name') +
                            ': found movie ID ' + match.group(1),
                            xbmc.LOGNOTICE)
                        self.package.file.MOVIEID = match.group(1)

                        #xbmc.executeJSONRPC('{"params": {"episodeid": '+str(match.group(1))+', "resume": {"position": '+str(self.time)+', "total":  '+str(self.package.file.duration)+'}}, "jsonrpc": "2.0", "id": "setResumePoint", "method": "VideoLibrary.SetEpisodeDetails"}')
                        #xbmc.executeJSONRPC('{"params": {"movieid": '+str(match.group(1))+', "playcount": '+str(self.package.file.playcount+1)+'}, "jsonrpc": "2.0", "id": "setResumePoint", "method": "VideoLibrary.SetMovieDetails"}')
                        break
                    if foundMatch == 0:
                        for match in re.finditer(
                                '"file":"[^\"]+' +
                                str(re.escape(self.package.file.title)) +
                                '.strm","label":"[^\"]+","movieid":(\d+)',
                                result):  #, re.S):

                            xbmc.log(
                                self.service.addon.getAddonInfo('name') +
                                ': found movie ID ' + match.group(1),
                                xbmc.LOGNOTICE)
                            self.package.file.MOVIEID = match.group(1)

                            #xbmc.executeJSONRPC('{"params": {"episodeid": '+str(match.group(1))+', "resume": {"position": '+str(self.time)+', "total":  '+str(self.package.file.duration)+'}}, "jsonrpc": "2.0", "id": "setResumePoint", "method": "VideoLibrary.SetEpisodeDetails"}')
                            #xbmc.executeJSONRPC('{"params": {"movieid": '+str(match.group(1))+', "playcount": '+str(self.package.file.playcount+1)+'}, "jsonrpc": "2.0", "id": "setResumePoint", "method": "VideoLibrary.SetMovieDetails"}')
                            break

                    if self.service.settings and foundMatch == 1:
                        xbmc.log(
                            self.service.addon.getAddonInfo('name') +
                            ': Found local movie db  id=' +
                            str(self.package.file.MOVIEID), xbmc.LOGNOTICE)

        except:
            pass

    def onPlayBackEnded(self):
        xbmc.log(
            self.service.addon.getAddonInfo('name') + ': PLAYBACK ENDED',
            xbmc.LOGNOTICE)
        #        self.next()
        if self.package is not None:
            try:
                if addon_parameters.spreadsheet and self.service.cloudResume == '1' and self.service.protocol == 2 and self.time > self.package.file.resume:
                    xbmc.log(
                        self.service.addon.getAddonInfo('name') +
                        ': PLAYBACK ENDED 1 ' +
                        str(self.package.file.playcount), xbmc.LOGNOTICE)

                    self.service.setProperty(self.package.file.id, 'resume',
                                             self.time)
                    self.service.setProperty(
                        self.package.file.id, 'playcount',
                        int(self.package.file.playcount) + 1)

                    if self.service.settings:
                        xbmc.log(
                            self.service.addon.getAddonInfo('name') +
                            ': Updated remote db ', xbmc.LOGNOTICE)

                elif addon_parameters.spreadsheet and self.service.cloudResume == '2' and self.service.protocol == 2 and (
                        self.time / self.package.file.duration) >= int(
                            self.service.settings.skipResume
                        ) * 0.01:  #and self.time > self.package.file.resume:
                    xbmc.log(
                        self.service.addon.getAddonInfo('name') +
                        ': PLAYBACK ENDED 2 ' +
                        str(self.package.file.playcount), xbmc.LOGNOTICE)

                    self.service.gSpreadsheet.setMediaStatus(
                        self.service.worksheetID,
                        self.package,
                        watched=int(self.package.file.playcount) + 1,
                        resume=0)

                    if self.service.settings:
                        xbmc.log(
                            self.service.addon.getAddonInfo('name') +
                            ': Updated local db ', xbmc.LOGNOTICE)

#               if self.service.settings.tv_watch:
#                exp = re.search('0?(\d+)',  self.package.file.season)
#                season = exp.group(1)
#                exp = re.search('0?(\d+)',  self.package.file.episode)
#                episode = exp.group(1)
#                result = xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method": "VideoLibrary.GetEpisodes", "params": {"filter":{"and": [{"field": "season", "operator": "is", "value": "'+str(season)+'"}, {"field": "episode", "operator": "is", "value": "'+str(episode)+'"}]}}, "id": 1}')
#                exp = re.search('"episodeid":(\d+)', result)
#                episodeID = exp.group(1)
#xbmc.executeJSONRPC('{"params": {"episodeid": '+str(episodeID)+', "resume": {"position": '+str(self.time)+', "total":  '+str(self.package.file.duration)+'}}, "jsonrpc": "2.0", "id": "setResumePoint", "method": "VideoLibrary.SetEpisodeDetails"}')
#                xbmc.executeJSONRPC('{"params": {"episodeid": '+str(episodeID)+', "playcount": '+str(self.package.file.playcount+1)+'}, "jsonrpc": "2.0", "id": "setResumePoint", "method": "VideoLibrary.SetEpisodeDetails"}')

            except:
                pass

            try:

                if (self.service.settings.tv_watch
                        and self.package.file.TVID != None):
                    xbmc.executeJSONRPC(
                        '{"params": {"episodeid": ' +
                        str(self.package.file.TVID) + ', "playcount": ' +
                        str(int(self.package.file.playcount) + 1) +
                        '}, "jsonrpc": "2.0", "id": "setResumePoint", "method": "VideoLibrary.SetEpisodeDetails"}'
                    )
                    xbmc.log(
                        self.service.addon.getAddonInfo('name') +
                        ': 1 Updated watch status local tv db id=' +
                        str(self.package.file.TVID) + ' playcount=' +
                        str(int(self.package.file.playcount) + 1),
                        xbmc.LOGNOTICE)

                elif (self.service.settings.movie_watch
                      and self.package.file.MOVIEID != None):
                    xbmc.executeJSONRPC(
                        '{"params": {"movieid": ' +
                        str(self.package.file.MOVIEID) + ', "playcount": ' +
                        str(int(self.package.file.playcount) + 1) +
                        '}, "jsonrpc": "2.0", "id": "setResumePoint", "method": "VideoLibrary.SetMovieDetails"}'
                    )
                    xbmc.log(
                        self.service.addon.getAddonInfo('name') +
                        ': 1 Updated watch status local movie db id=' +
                        str(self.package.file.MOVIEID) + ' playcount=' +
                        str(int(self.package.file.playcount) + 1),
                        xbmc.LOGNOTICE)

                else:

                    if (self.service.settings.tv_watch
                            or self.service.settings.movie_watch):
                        result = xbmc.executeJSONRPC(
                            '{"jsonrpc": "2.0", "method": "VideoLibrary.GetEpisodes", "params": {  "sort": {"method":"lastplayed"}, "filter": {"field": "title", "operator": "isnot", "value":"1"}, "properties": [  "file"]}, "id": "1"}'
                        )
                        fixedTitle = re.escape(
                            re.sub(' ', '+', self.package.file.title))

                        foundMatch = 0

                        if (self.service.settings.tv_watch):

                            #exp = re.search('"episodeid":(\d+), "file":"[^\"]+"', result)
                            #for match in re.finditer('"episodeid":(\d+)\,"file"\:".*'+str(fixedTitle)+'\.strm"', result):#, re.S):
                            for match in re.finditer(
                                    '"episodeid":(\d+)\,"file"\:"[^\"]*' +
                                    str(fixedTitle) + '[^\"]*"',
                                    result):  #, re.S):

                                xbmc.log(
                                    self.service.addon.getAddonInfo('name') +
                                    ': found show ID ' + match.group(1),
                                    xbmc.LOGNOTICE)
                                #xbmc.executeJSONRPC('{"params": {"episodeid": '+str(match.group(1))+', "resume": {"position": '+str(self.time)+', "total":  '+str(self.package.file.duration)+'}}, "jsonrpc": "2.0", "id": "setResumePoint", "method": "VideoLibrary.SetEpisodeDetails"}')
                                xbmc.executeJSONRPC(
                                    '{"params": {"episodeid": ' +
                                    str(match.group(1)) + ', "playcount": ' +
                                    str(int(self.package.file.playcount) + 1) +
                                    '}, "jsonrpc": "2.0", "id": "setResumePoint", "method": "VideoLibrary.SetEpisodeDetails"}'
                                )
                                foundMatch = 1
                                break

                            if self.service.settings and foundMatch == 1:
                                xbmc.log(
                                    self.service.addon.getAddonInfo('name') +
                                    ': 2 Updated local tv db id=' +
                                    str(self.package.file.TVID) +
                                    ' playcount=' +
                                    str(int(self.package.file.playcount) + 1),
                                    xbmc.LOGNOTICE)

                        elif self.service.settings.movie_watch and foundMatch == 0:
                            result = xbmc.executeJSONRPC(
                                '{"jsonrpc": "2.0", "method": "VideoLibrary.GetMovies", "params": {  "sort": {"method":"lastplayed"}, "filter": {"field": "title", "operator": "isnot", "value":"1"}, "properties": [  "file"]}, "id": "1"}'
                            )
                            for match in re.finditer(
                                    '"file"\:"[^\"]*' + str(fixedTitle) +
                                    '[^\"]*","label":"[^\"]+","movieid":(\d+)',
                                    result):  #, re.S):

                                xbmc.log(
                                    self.service.addon.getAddonInfo('name') +
                                    ': found movie ID ' + match.group(1),
                                    xbmc.LOGNOTICE)
                                #xbmc.executeJSONRPC('{"params": {"episodeid": '+str(match.group(1))+', "resume": {"position": '+str(self.time)+', "total":  '+str(self.package.file.duration)+'}}, "jsonrpc": "2.0", "id": "setResumePoint", "method": "VideoLibrary.SetEpisodeDetails"}')
                                xbmc.executeJSONRPC(
                                    '{"params": {"movieid": ' +
                                    str(match.group(1)) + ', "playcount": ' +
                                    str(int(self.package.file.playcount) + 1) +
                                    '}, "jsonrpc": "2.0", "id": "setResumePoint", "method": "VideoLibrary.SetMovieDetails"}'
                                )
                                break

                            if self.service.settings and foundMatch == 1:
                                xbmc.log(
                                    self.service.addon.getAddonInfo('name') +
                                    ': 2 Updated local movie db id=' +
                                    str(self.package.file.MOVIEID) +
                                    ' playcount=' +
                                    str(int(self.package.file.playcount) + 1),
                                    xbmc.LOGNOTICE)

            except:
                pass

            #try:

            #    self.service.gSpreadsheet.setMediaStatus(self.worksheet,self.package, watched=1)
            #except: pass
        self.current = self.current + 1
        self.isExit = True
        self.playStatus = False

    def onPlayBackStopped(self):
        xbmc.log(
            self.service.addon.getAddonInfo('name') + ': PLAYBACK STOPPED',
            xbmc.LOGNOTICE)

        if self.package is not None:
            try:
                if addon_parameters.spreadsheet and self.service.cloudResume == '1' and self.service.protocol == 2 and float(
                        self.time) > float(self.package.file.resume):
                    xbmc.log(
                        self.service.addon.getAddonInfo('name') +
                        ': PLAYBACK STOPPED 1 ' + str(self.time),
                        xbmc.LOGNOTICE)

                    self.service.setProperty(self.package.file.id, 'resume',
                                             self.time)

                    if self.service.settings:
                        xbmc.log(
                            self.service.addon.getAddonInfo('name') +
                            ': Updated remote db ', xbmc.LOGNOTICE)

                elif addon_parameters.spreadsheet and self.service.cloudResume == '2' and self.service.protocol == 2:  # and float(self.time) > float(self.package.file.resume):
                    xbmc.log(
                        self.service.addon.getAddonInfo('name') +
                        ': PLAYBACK STOPPED 2 ' + str(self.time),
                        xbmc.LOGNOTICE)

                    self.service.gSpreadsheet.setMediaStatus(
                        self.service.worksheetID,
                        self.package,
                        resume=self.time)

#                exp = re.search('0?(\d+)',  self.package.file.season)
#                season = exp.group(1)
#                exp = re.search('0?(\d+)',  self.package.file.episode)
#                episode = exp.group(1)
#                result = xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method": "VideoLibrary.GetEpisodes", "params": {"filter":{"and": [{"field": "season", "operator": "is", "value": "'+str(season)+'"}, {"field": "episode", "operator": "is", "value": "'+str(episode)+'"}]}}, "id": 1}')
#                exp = re.search('"episodeid":(\d+)', result)
#                episodeID = exp.group(1)
#result = xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method": "VideoLibrary.GetEpisodes", "params": {  "sort": {"method":"lastplayed"}, "filter": {"field": "title", "operator": "isnot", "value":"1"}, "properties": [  "file"], "limits":{"end":3}}, "id": "1"}')

            except:
                pass

        try:

            if (self.service.settings.tv_watch
                    or self.service.settings.movie_watch):

                if (float(self.service.settings.skipResume) / 100 < float(
                        self.time / self.package.file.duration)):

                    if (self.service.settings.tv_watch
                            and self.package.file.TVID != None):
                        #xbmc.executeJSONRPC('{"params": {"episodeid": '+str(self.package.file.TVID)+',  "playcount": '+str(int(self.package.file.playcount)+1)+',"resume": {"position": '+str(1)+', "total":  '+str(1)+'}}, "jsonrpc": "2.0", "id": "setResumePoint", "method": "VideoLibrary.SetEpisodeDetails"}')
                        #xbmc.executeJSONRPC('{"params": {"episodeid": '+str(self.package.file.TVID)+', "resume": {"position": '+str(self.time)+', "total":  '+str(self.package.file.duration)+'}, "playcount": '+str(int(self.package.file.playcount)+1)+'}, "jsonrpc": "2.0", "id": "setResumePoint", "method": "VideoLibrary.SetEpisodeDetails"}')
                        #xbmc.executeJSONRPC('{"params": {"episodeid": '+str(self.package.file.TVID)+', "playcount": '+str(1)+'}, "jsonrpc": "2.0", "id": "setResumePoint", "method": "VideoLibrary.SetEpisodeDetails"}')
                        xbmc.executeJSONRPC(
                            '{"params": {"episodeid": ' +
                            str(self.package.file.TVID) + ', "playcount": ' +
                            str(int(self.package.file.playcount) + 1) +
                            ', "resume": {"position": ' + str(self.time) +
                            ', "total":  ' + str(self.package.file.duration) +
                            '}}, "jsonrpc": "2.0", "id": "setResumePoint", "method": "VideoLibrary.SetEpisodeDetails"}'
                        )

                        xbmc.log(
                            self.service.addon.getAddonInfo('name') +
                            ': 1 Updated watch + resume status local tv db id='
                            + str(self.package.file.TVID) + ' playcount=' +
                            str(int(self.package.file.playcount)) + ' time=' +
                            self.time + ' duration=' +
                            self.package.file.duration, xbmc.LOGNOTICE)

                    elif (self.service.settings.movie_watch
                          and self.package.file.MOVIEID != None):
                        # xbmc.executeJSONRPC('{"params": {"movieid": '+str(self.package.file.MOVIEID)+', "resume": {"position": '+str(self.time)+', "total":  '+str(self.package.file.duration)+'}}, "jsonrpc": "2.0", "id": "setResumePoint", "method": "VideoLibrary.SetMovieDetails"}')
                        xbmc.executeJSONRPC(
                            '{"params": {"movieid": ' +
                            str(self.package.file.MOVIEID) +
                            ', "playcount": ' +
                            str(int(self.package.file.playcount) + 1) +
                            ', "resume": {"position": ' + str(self.time) +
                            ', "total":  ' + str(self.package.file.duration) +
                            '}}, "jsonrpc": "2.0", "id": "setResumePoint", "method": "VideoLibrary.SetMovieDetails"}'
                        )

                        xbmc.log(
                            self.service.addon.getAddonInfo('name') +
                            ': 1 Updated watch + resume status local movie db id='
                            + str(self.package.file.MOVIEID) + ' playcount=' +
                            str(int(self.package.file.playcount)) + ' time=' +
                            self.time + ' duration=' +
                            self.package.file.duration, xbmc.LOGNOTICE)

                else:

                    if (self.service.settings.tv_watch
                            and self.package.file.TVID != None):
                        xbmc.executeJSONRPC(
                            '{"params": {"episodeid": ' +
                            str(self.package.file.TVID) +
                            ', "resume": {"position": ' + str(self.time) +
                            ', "total":  ' + str(self.package.file.duration) +
                            '}}, "jsonrpc": "2.0", "id": "setResumePoint", "method": "VideoLibrary.SetEpisodeDetails"}'
                        )
                        xbmc.log(
                            self.service.addon.getAddonInfo('name') +
                            ': 2 Updated resume status local tv db id=' +
                            str(self.package.file.TVID) + ' playcount=' +
                            str(int(self.package.file.playcount)) + ' time=' +
                            self.time + ' duration=' +
                            self.package.file.duration, xbmc.LOGNOTICE)

                    elif (self.service.settings.movie_watch
                          and self.package.file.MOVIEID != None):
                        xbmc.executeJSONRPC(
                            '{"params": {"movieid": ' +
                            str(self.package.file.MOVIEID) +
                            ', "resume": {"position": ' + str(self.time) +
                            ', "total":  ' + str(self.package.file.duration) +
                            '}}, "jsonrpc": "2.0", "id": "setResumePoint", "method": "VideoLibrary.SetMovieDetails"}'
                        )
                        xbmc.log(
                            self.service.addon.getAddonInfo('name') +
                            ': 2 Updated resume status local movie db id=' +
                            str(self.package.file.MOVIEID) + ' playcount=' +
                            str(int(self.package.file.playcount)) + ' time=' +
                            self.time + ' duration=' +
                            self.package.file.duration, xbmc.LOGNOTICE)

                    elif (self.service.settings.tv_watch
                          or self.service.settings.movie_watch):

                        result = xbmc.executeJSONRPC(
                            '{"jsonrpc": "2.0", "method": "VideoLibrary.GetEpisodes", "params": {  "sort": {"method":"lastplayed"}, "filter": {"field": "title", "operator": "isnot", "value":"1"}, "properties": [  "file"]}, "id": "1"}'
                        )
                        fixedTitle = re.escape(
                            re.sub(' ', '+', self.package.file.title))

                        foundMatch = 0

                        if (self.service.settings.tv_watch):
                            #exp = re.search('"episodeid":(\d+), "file":"[^\"]+"', result)
                            #for match in re.finditer('"episodeid":(\d+)\,"file"\:".*'+str(fixedTitle)+'\.strm"', result):#, re.S):
                            for match in re.finditer(
                                    '"episodeid":(\d+)\,"file"\:"[^\"]*' +
                                    str(fixedTitle) + '[^\"]*"',
                                    result):  #, re.S):

                                xbmc.log(
                                    self.service.addon.getAddonInfo('name') +
                                    ': found show ID ' + match.group(1),
                                    xbmc.LOGNOTICE)
                                xbmc.executeJSONRPC(
                                    '{"params": {"episodeid": ' +
                                    str(match.group(1)) +
                                    ', "resume": {"position": ' +
                                    str(self.time) + ', "total":  ' +
                                    str(self.package.file.duration) +
                                    '}}, "jsonrpc": "2.0", "id": "setResumePoint", "method": "VideoLibrary.SetEpisodeDetails"}'
                                )
                                foundMatch = 1
                                break
                            #sxbmc.executeJSONRPC('{"params": {"episodeid": '+str(episodeID)+', "resume": {"position": '+str(self.time)+', "total":  '+str(self.package.file.duration)+'}}, "jsonrpc": "2.0", "id": "setResumePoint", "method": "VideoLibrary.SetEpisodeDetails"}')
                            #xbmc.executeJSONRPC('{"params": {"episodeid": '+str(episodeID)+', "playcount": '+str(self.package.file.playcount+1)+'}, "jsonrpc": "2.0", "id": "setResumePoint", "method": "VideoLibrary.SetEpisodeDetails"}')

                            if self.service.settings and foundMatch == 1:
                                xbmc.log(
                                    self.service.addon.getAddonInfo('name') +
                                    ': 3 Updated local tv db playcount=' +
                                    str(int(self.package.file.playcount)) +
                                    ' time=' + self.time + ' duration=' +
                                    self.package.file.duration, xbmc.LOGNOTICE)

                            elif self.service.settings.movie_watch and foundMatch == 0:
                                result = xbmc.executeJSONRPC(
                                    '{"jsonrpc": "2.0", "method": "VideoLibrary.GetMovies", "params": {  "sort": {"method":"lastplayed"}, "filter": {"field": "title", "operator": "isnot", "value":"1"}, "properties": [  "file"]}, "id": "1"}'
                                )
                                for match in re.finditer(
                                        '"file"\:"[^\"]*' + str(fixedTitle) +
                                        '[^\"]*","label":"[^\"]+","movieid":(\d+)',
                                        result):  #, re.S):

                                    xbmc.log(
                                        self.service.addon.getAddonInfo('name')
                                        + ': found movie ID ' + match.group(1),
                                        xbmc.LOGNOTICE)
                                    xbmc.executeJSONRPC(
                                        '{"params": {"movieid": ' +
                                        str(match.group(1)) +
                                        ', "resume": {"position": ' +
                                        str(self.time) + ', "total":  ' +
                                        str(self.package.file.duration) +
                                        '}}, "jsonrpc": "2.0", "id": "setResumePoint", "method": "VideoLibrary.SetMovieDetails"}'
                                    )
                                    #xbmc.executeJSONRPC('{"params": {"movieid": '+str(match.group(1))+', "playcount": '+str(self.package.file.playcount+1)+'}, "jsonrpc": "2.0", "id": "setResumePoint", "method": "VideoLibrary.SetMovieDetails"}')
                                    break

                                if self.service.settings and foundMatch == 1:
                                    xbmc.log(
                                        self.service.addon.getAddonInfo('name')
                                        +
                                        ': 3 Updated local movie db playcount='
                                        +
                                        str(int(self.package.file.playcount)) +
                                        ' time=' + self.time + ' duration=' +
                                        self.package.file.duration,
                                        xbmc.LOGNOTICE)

        except:
            pass

        #self.current = self.current +1
        self.isExit = True
        #        if not self.isExit:
        #            print "don't exit"
        self.playStatus = False

    def onPlayBackPaused(self):
        print "PLAYBACK Paused"
        if self.seek > 0:
            self.seekTime(self.seek)
            self.seek = 0

    def seekTo(self, seek):
        if seek != '':
            self.seek = float(seek)
#        self.tvScheduler.setVideoWatched(self.worksheet, self.content[self.current][0])
        if seek > 0 and seek != '':
            while not self.isPlaying(
            ):  #<== The should be    while self.isPlaying():
                print "LOOP"
                xbmc.sleep(500)
            xbmc.sleep(2000)
            print "SEEK " + str(seek)
            self.time = float(seek)
            self.seekTime(float(seek))
            if self.service.settings:
                xbmc.log(
                    self.service.addon.getAddonInfo('name') + ': Seek ' +
                    str(self.time), xbmc.LOGNOTICE)
示例#17
0
# REMOTE DEBUGGING
REMOTE_DBG = False

# append pydev remote debugger
if REMOTE_DBG:
    # Make pydev debugger works for auto reload.
    # Note pydevd module need to be copied in XBMC\system\python\Lib\pysrc
    try:
        import pysrc.pydevd as pydevd
    # stdoutToServer and stderrToServer redirect stdout and stderr to eclipse console
        pydevd.settrace('localhost', stdoutToServer=True, stderrToServer=True, suspend=False)
    except ImportError:
        sys.stderr.write("Error: " +
            "You must add org.python.pydev.debug.pysrc to your PYTHONPATH.")
        sys.exit(1)
    except:
        sys.stderr.write('Remote Debugger is not started')



##if (__name__ == "__main__" ):
##    from lib.main import Main
##    main = Main()
##    main.run()

class Main:
  def __init__(self):
    self.pDialog = None
    self.run()
示例#18
0
        try:
            import pydevd
        except ImportError:
            sys.stderr.write(
                "Error: Debugging could not be enabled." +
                "Unable to determine directory where org.python.pydev.debug.pysrc is stored. "
                +
                "Please add this path either to your PYTHONPATH, or in the \"pysrc_path\" setting in addon.xml. "
                +
                "If you are not sure where this is, try searching your computer for a \"pysrc\" directory."
            )
            sys.exit(1)

    # stdoutToServer and stderrToServer redirect stdout and stderr to eclipse console
    pydevd.settrace(host=remote_debugger_host,
                    stdoutToServer=True,
                    stderrToServer=True,
                    port=remote_debugger_port)

# -*- coding: cp1252 -*-
from bs4 import BeautifulSoup
import urllib, urllib2, re, xbmcplugin, xbmcgui, xbmc

# Set default encoding to 'UTF-8' instead of 'ascii'
reload(sys)
sys.setdefaultencoding("UTF8")

__language__ = addon.getLocalizedString
__icon__ = addon.getAddonInfo('icon')
__fanart__ = addon.getAddonInfo('fanart')

#headers = ['User-Agent', 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3']
示例#19
0
def start():
    pydevd.settrace('localhost', stdoutToServer=True, stderrToServer=True, suspend=False)
    #pydevd.settrace('192.168.1.10', stdoutToServer=True, stderrToServer=True, suspend=False)
    #pydevd.settrace('192.168.1.10')        
    
    logging.basicConfig(level=logging.DEBUG)
REMOTE_DBG = True 

# append pydev remote debugger
if REMOTE_DBG:
    # Make pydev debugger works for auto reload.
    # Note pydevd module need to be copied in XBMC\system\python\Lib\pysrc
    try:
        import pysrc.pydevd as pydevd
    # stdoutToServer and stderrToServer redirect stdout and stderr to eclipse console
        pydevd.settrace('10.155.30.24',port=5678, stdoutToServer=True, stderrToServer=True)
    except ImportError:
        sys.stderr.write("Error: " +
            "You must add org.python.pydev.debug.pysrc to your PYTHONPATH.")
        sys.exit(1)
        
from selenium.webdriver.remote.webdriver import WebDriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
from selenium.webdriver.firefox.firefox_profile import FirefoxProfile
from selenium.webdriver.common.by import By

class WebUIDriver(WebDriver):
    def __init__(self, command_executor='http://127.0.0.1:4444/wd/hub', desired_capabilities=None, browser_profile=None, session_id=None):
        self.preserved_session_id = session_id
        WebDriver.__init__(self, command_executor, desired_capabilities, browser_profile)

    def start_session(self, desired_capabilities, browser_profile=None):
        if self.preserved_session_id:
            self.command_executor._commands['getSession'] = ('GET', '/session/$sessionId')
            self.session_id = self.preserved_session_id
            response = self.execute('getSession', {'sessionId ': self.session_id})
            self.session_id = response['sessionId']
示例#21
0
文件: _devd.py 项目: mwicat/s60rpyc
'''
Created on Jan 9, 2011

@author: Administrator
'''


from pysrc import pydevd

pydevd.settrace('172.16.0.1', stdoutToServer=True, stderrToServer=True)
import rpyc
print 'marek'
示例#22
0
except:
    import simplejson as json
import SimpleDownloader as downloader
import time


g_ignoreSetResolved=['plugin.video.f4mTester','plugin.video.shahidmbcnet']

REMOTE_DBG=False;
if REMOTE_DBG:
    # Make pydev debugger works for auto reload.
    # Note pydevd module need to be copied in XBMC\system\python\Lib\pysrc
    try:
        import pysrc.pydevd as pydevd
    # stdoutToServer and stderrToServer redirect stdout and stderr to eclipse console
        pydevd.settrace('localhost', stdoutToServer=True, stderrToServer=True)
    except ImportError:
        sys.stderr.write("Error: " +
            "You must add org.python.pydev.debug.pysrc to your PYTHONPATH.")
        sys.exit(1)  


addon = xbmcaddon.Addon('plugin.video.live.streams')
addon_version = addon.getAddonInfo('version')
profile = xbmc.translatePath(addon.getAddonInfo('profile').decode('utf-8'))
home = xbmc.translatePath(addon.getAddonInfo('path').decode('utf-8'))
favorites = os.path.join(profile, 'favorites')
REV = os.path.join(profile, 'list_revision')
icon = os.path.join(home, 'icon.png')
FANART = os.path.join(home, 'fanart.jpg')
source_file = os.path.join(profile, 'source_file')
示例#23
0
def f**k(_sys, _xbmc):
    ####Variables
    # Inicializadas
    global sys
    global xbmc
    global logger
    global addon
    sys = _sys
    xbmc = _xbmc
    modo = MODO_INICIAL
    params = get_params()
    url_plugin = sys.argv[0]
    handle_xbmc = int(sys.argv[1])
    addon = xbmcaddon.Addon(id=__plugin__)

    # Sin inicializar
    velocidad_internet = 0
    total_a_descargar = 0
    urls_archivos_descargables = []
    hilos_archivos_descargables = []
    logger = None
    opener = None
    pagina = None
    parser_html = None
    carpeta_li = None
    archivo_persistencia = None
    url_descarga = ""
    carpetas = {}

    # append pydev remote debuggerm
    if REMOTE_DBG:
        # Make pydev debugger works for auto reload.
        # Note pydevd module need to be copied in XBMC\system\python\Lib\pysrc
        try:
            import pysrc.pydevd as pydevd

            # stdoutToServer and stderrToServer redirect stdout and stderr to eclipse console
            pydevd.settrace("localhost", stdoutToServer=True, stderrToServer=True, port=5678)
        except ImportError:
            sys.stderr.write("Error: " + "You must add org.python.pydev.debug.pysrc to your PYTHONPATH.")
            sys.exit(1)

    # Inicializando logger

    logging.basicConfig(level=logging.DEBUG)
    logger = logging.getLogger("mierda")
    #   logger.debug("kussou rumba %s" % params)

    # Configurando el timeout de los socketes
    socket.setdefaulttimeout(60)

    if len(params) > 0 and params["modo"]:
        modo = int(params["modo"], 0)

    if modo == MODO_INICIAL:
        logger.debug("Modo inicial")
        carpeta_li = xbmcgui.ListItem("Series", iconImage="DefaultFolder.png", thumbnailImage="")
        carpeta_li.setInfo(type="Video", infoLabels={"Title": "Series"})
        xbmcplugin.addDirectoryItem(
            handle=handle_xbmc, url="%s?modo=%d" % (url_plugin, MODO_CARPETA), listitem=carpeta_li, isFolder=True
        )

        carpeta_li = xbmcgui.ListItem("Canales", iconImage="DefaultFolder.png", thumbnailImage="")
        carpeta_li.setInfo(type="Video", infoLabels={"Title": "Canales"})
        xbmcplugin.addDirectoryItem(
            handle=handle_xbmc, url="%s?modo=%d" % (url_plugin, MODO_LISTA_FLUJO), listitem=carpeta_li, isFolder=True
        )

        carpeta_li = xbmcgui.ListItem("Peliculas", iconImage="DefaultFolder.png", thumbnailImage="")
        carpeta_li.setInfo(type="Video", infoLabels={"Title": "Peliculas"})
        xbmcplugin.addDirectoryItem(
            handle=handle_xbmc, url="%s?modo=%d" % (url_plugin, MODO_LISTA_PELOS), listitem=carpeta_li, isFolder=True
        )

        carpeta_li = xbmcgui.ListItem("Pagos por evento", iconImage="DefaultFolder.png", thumbnailImage="")
        carpeta_li.setInfo(type="Video", infoLabels={"Title": "PPV"})
        xbmcplugin.addDirectoryItem(
            handle=handle_xbmc, url="%s?modo=%d" % (url_plugin, MODO_INICIAL), listitem=carpeta_li, isFolder=True
        )

        xbmcplugin.endOfDirectory(int(sys.argv[1]))
    elif modo == MODO_CARPETA:
        logger.debug("Modo carpeta")

        opener = urllib2.build_opener(urllib2.HTTPHandler(debuglevel=1))
        opener.addheaders = [("User-agent", "Mozilla/5.0")]
        pagina = opener.open(URL_CACA)
        parser_html = ParserArchivos(pagina)

        archivo_persistencia = shelve.open("mierda")
        archivo_persistencia["carpetas"] = parser_html.carpetas
        archivo_persistencia.close()

        for carpeta in parser_html.carpetas:
            carpeta_li = xbmcgui.ListItem(carpeta.replace(".", " "), iconImage="DefaultFolder.png", thumbnailImage="")
            carpeta_li.setInfo(type="Video", infoLabels={"Title": carpeta.replace(".", " ")})
            xbmcplugin.addDirectoryItem(
                handle=handle_xbmc,
                url="%s?carpeta=%s&modo=%d" % (url_plugin, carpeta, MODO_ARCHIVO),
                listitem=carpeta_li,
                isFolder=True,
            )

        xbmcplugin.endOfDirectory(int(sys.argv[1]))

    elif modo == MODO_ARCHIVO:
        logger.debug("Modo archivo")

        archivo_persistencia = shelve.open("mierda")
        carpetas = archivo_persistencia["carpetas"]

        for archivo in carpetas[params["carpeta"]]:
            carpeta_li = xbmcgui.ListItem(archivo, iconImage="DefaultFolder.png", thumbnailImage="")
            carpeta_li.setInfo(type="Video", infoLabels={"Title": archivo})
            logger.debug("La url a la que e hara la peticion es " + URL_CACA + params["carpeta"])
            xbmcplugin.addDirectoryItem(
                handle=handle_xbmc,
                url="%s?carpeta=%s&archivo=%s&modo=%d" % (url_plugin, params["carpeta"], archivo, MODO_ACCESO_ARCHIVO),
                listitem=carpeta_li,
                isFolder=False,
            )

        archivo_persistencia.close()

        xbmcplugin.endOfDirectory(int(sys.argv[1]))
    elif modo == MODO_ACCESO_ARCHIVO:
        logger.debug("Modo acceso archivo")
        archivo_persistencia = shelve.open("mierda")
        carpetas = archivo_persistencia["carpetas"]

        logger.debug("La carpeta es %s, el archivo es %s" % (params["carpeta"], params["archivo"]))
        url_descarga = URL_CACA + carpetas[params["carpeta"]][params["archivo"]]

        archivo_persistencia.close()

        logger.debug("Modo de reproduccion la url %s" % url_descarga)

        urls_archivos_descargables = get_urls_archivos(url_descarga)

        logger.debug("Empieza la descarga de poder")
        for url_archivo_descargable in urls_archivos_descargables:
            logger.debug("die die die my darling %s" % url_archivo_descargable)
            # https://www.assembla.com/wiki/show/oniontv-plugin/Script_to_play_a_video_file_in_XBMC
            playlist = xbmc.PlayList(xbmc.PLAYLIST_VIDEO)
            playlist.clear()
            playlist.add(url_descarga + url_archivo_descargable)
            xbmc.Player().play(playlist)
    elif modo == MODO_LISTA_FLUJO:
        logger.debug("Modo lista flujo")

        #        logger.debug("Modo lista de flujos %s" % addon.getAddonInfo('path'))

        parser_html = ParserFlujos(open(addon.getAddonInfo("path") + "/plantillas_html/series.html", "r"))
        logger.debug("Los flujos encontrados son %s" % parser_html.flujos)

        for flujo in parser_html.flujos:
            carpeta_li = xbmcgui.ListItem(flujo[0], iconImage="DefaultFolder.png", thumbnailImage="")
            carpeta_li.setInfo(type="Video", infoLabels={"Title": flujo[0]})
            logger.debug("La url a la que e hara la peticion es " + flujo[1])
            xbmcplugin.addDirectoryItem(
                handle=handle_xbmc,
                url="%s?flujo=%s&modo=%d" % (url_plugin, flujo[1], MODO_FLUJO),
                listitem=carpeta_li,
                isFolder=False,
            )

        xbmcplugin.endOfDirectory(int(sys.argv[1]))

    elif modo == MODO_FLUJO:
        logger.debug("Modo   flujo")
        playlist = xbmc.PlayList(xbmc.PLAYLIST_VIDEO)
        playlist.clear()
        playlist.add(params["flujo"])
        xbmc.Player().play(playlist)
    elif modo == MODO_LISTA_PELOS:
        logger.debug("Modo lista pelos")

        opener = urllib2.build_opener(urllib2.HTTPHandler(debuglevel=1))
        opener.addheaders = [("User-agent", "Mozilla/5.0")]
        pagina = opener.open(URL_PELOS)
        parser_html = ParserPelos(pagina)

        for pelo in parser_html.pelos:
            carpeta_li = xbmcgui.ListItem(pelo.replace(".", " "), iconImage="DefaultFolder.png", thumbnailImage="")
            carpeta_li.setInfo(type="Video", infoLabels={"Title": pelo.replace(".", " ")})
            xbmcplugin.addDirectoryItem(
                handle=handle_xbmc,
                url="%s?carpeta=%s&modo=%d&url_pelo=%s" % (url_plugin, pelo, MODO_PELO, parser_html.pelos[pelo]),
                listitem=carpeta_li,
                isFolder=True,
            )

        xbmcplugin.endOfDirectory(int(sys.argv[1]))
    elif modo == MODO_PELO:
        logger.debug("Modo pelo %s" % params["url_pelo"])

        url_archivo_descargable = get_url_pelo(URL_PELOS + params["url_pelo"])
        url_archivo_descargable = URL_PELOS + params["url_pelo"] + "/" + url_archivo_descargable

        logger.debug("die die die my darling %s" % url_archivo_descargable)
        playlist = xbmc.PlayList(xbmc.PLAYLIST_VIDEO)
        playlist.clear()
        playlist.add(url_archivo_descargable)
        xbmc.Player().play(playlist)

    else:
        logger.error("Modo desconocido, abortando")
        sys.exit(1)
示例#24
0
    def searchBacklog(self, which_shows=None):

        REMOTE_DBG = False
            
        if REMOTE_DBG:
                    # Make pydev debugger works for auto reload.
                    # Note pydevd module need to be copied in XBMC\system\python\Lib\pysrc
            try:
                import pysrc.pydevd as pydevd
                    # stdoutToServer and stderrToServer redirect stdout and stderr to eclipse console
                pydevd.settrace('localhost', port=5678, stdoutToServer=True, stderrToServer=True)
            except ImportError:
                sys.stderr.write("Error: " +
                        "You must add org.python.pydev.debug.pysrc to your PYTHONPATH.")
                sys.exit(1)

        if which_shows:
            show_list = which_shows
        else:
            show_list = sickbeard.showList

        if self.amActive == True:
            logger.log(u"Backlog is still running, not starting it again", logger.DEBUG)
            return

        self._get_lastBacklog()

        curDate = datetime.date.today().toordinal()
        fromDate = datetime.date.fromordinal(1)

        if not which_shows and not curDate - self._lastBacklog >= self.cycleTime:
            logger.log(u"Running limited backlog on recently missed episodes only")
            fromDate = datetime.date.today() - datetime.timedelta(days=7)

        self.amActive = True
        self.amPaused = False

        #myDB = db.DBConnection()
        #numSeasonResults = myDB.select("SELECT DISTINCT(season), showid FROM tv_episodes ep, tv_shows show WHERE season != 0 AND ep.showid = show.tvdb_id AND show.paused = 0 AND ep.airdate > ?", [fromDate.toordinal()])

        # get separate lists of the season/date shows
        #season_shows = [x for x in show_list if not x.air_by_date]
        air_by_date_shows = [x for x in show_list if x.air_by_date]

        # figure out how many segments of air by date shows we're going to do
        air_by_date_segments = []
        for cur_id in [x.tvdbid for x in air_by_date_shows]:
            air_by_date_segments += self._get_air_by_date_segments(cur_id, fromDate) 

        logger.log(u"Air-by-date segments: "+str(air_by_date_segments), logger.DEBUG)

        #totalSeasons = float(len(numSeasonResults) + len(air_by_date_segments))
        #numSeasonsDone = 0.0

        # go through non air-by-date shows and see if they need any episodes
        for curShow in show_list:

            if curShow.paused:
                continue

            if curShow.air_by_date:
                segments = [x[1] for x in self._get_air_by_date_segments(curShow.tvdbid, fromDate)]
            else:
                segments = self._get_season_segments(curShow.tvdbid, fromDate)

            for cur_segment in segments:

                self.currentSearchInfo = {'title': curShow.name + " Season "+str(cur_segment)}

                backlog_queue_item = search_queue.BacklogQueueItem(curShow, cur_segment)

                if not backlog_queue_item.wantSeason:
                    logger.log(u"Nothing in season "+str(cur_segment)+" needs to be downloaded, skipping this season", logger.DEBUG)
                else:
                    sickbeard.searchQueueScheduler.action.add_item(backlog_queue_item)  #@UndefinedVariable

        # don't consider this an actual backlog search if we only did recent eps
        # or if we only did certain shows
        if fromDate == datetime.date.fromordinal(1) and not which_shows:
            self._set_lastBacklog(curDate)

        self.amActive = False
        self._resetPI()
示例#25
0
import xbmcgui
import xbmcaddon
import json
import xbmc

REMOTE_DBG = False

# append pydev remote debugger
if REMOTE_DBG:
    # Make pydev debugger works for auto reload.
    # Note pydevd module need to be copied in XBMC\system\python\Lib\pysrc
    try:
        import pysrc.pydevd as pydevd
        # stdoutToServer and stderrToServer redirect stdout and stderr to eclipse console
        pydevd.settrace('192.168.0.12',
                        stdoutToServer=True,
                        stderrToServer=True)
    except ImportError:
        sys.stderr.write(
            "Error: " +
            "You must add org.python.pydev.debug.pysrc to your PYTHONPATH.")
        sys.exit(1)

socket.setdefaulttimeout(30)
pluginhandle = int(sys.argv[1])
addon = xbmcaddon.Addon()
addonID = addon.getAddonInfo('id')
thumbsDir = xbmc.translatePath('special://home/addons/' + addonID +
                               '/resources/thumbs')
forceViewMode = addon.getSetting("forceViewMode") == "true"
useThumbAsFanart = addon.getSetting("useThumbAsFanart") == "true"
示例#26
0
class gPlayer(xbmc.Player):

    try:

        import pysrc.pydevd as pydevd
        # stdoutToServer and stderrToServer redirect stdout and stderr to eclipse console
        pydevd.settrace('localhost', stdoutToServer=True, stderrToServer=True)
    except:
        pass

    def __init__(self, *args, **kwargs):
        xbmc.Player.__init__(self)
        self.isExit = False
        self.seek = 0
        self.package = None
        self.time = 0
        self.service = None
        self.current = 1

    def setService(self, service):
        self.service = service

    def setWorksheet(self, worksheet):
        self.worksheet = worksheet

    def setContent(self, episodes):
        self.content = episodes
        self.current = 0

    def setMedia(self, mediaItems):
        self.mediaItems = mediaItems
        self.current = 0

    def next(self):

        #            log('video ' + str(episodes[self.current][CONSTANTS.D_SOURCE]) + ',' + str(episodes[self.current][CONSTANTS.D_SHOW]))

        #        addVideo('plugin://plugin.video.gdrive?mode=playvideo&amp;title='+episodes[video][0],
        #                             { 'title' : str(episodes[video][CONSTANTS.D_SHOW]) + ' - S' + str(episodes[video][CONSTANTS.D_SEASON]) + 'xE' + str(episodes[video][CONSTANTS.D_EPISODE]) + ' ' + str(episodes[video][CONSTANTS.D_PART])  , 'plot' : episodes[video][CONSTANTS.D_SHOW] },
        #                             img='None')
        # play video
        #            if self.isExit == 0:
        self.play(
            'plugin://plugin.video.gdrive-testing/?mode=video&instance=' +
            str(self.service.instanceName) + '&title=' +
            self.content[self.current][0])
        #                self.play(self.content[self.current][0])

        #                self.tvScheduler.setVideoWatched(self.worksheet, self.content[self.current][0])
        #                self.tvScheduler.createRow(self.worksheet, '','','','')
        if self.current < len(self.content):
            self.current += 1
        else:
            self.current = 0

    def saveTime(self):
        try:
            newTime = self.getTime()
            if newTime > self.seek:
                self.time = newTime
        except:
            pass

    def PlayStream(self, url, item, seek, startPlayback=True, package=None):

        if startPlayback:
            self.play(url, item)

        if package is not None:
            self.package = package

        if seek != '':
            self.seek = float(seek)
#        self.tvScheduler.setVideoWatched(self.worksheet, self.content[self.current][0])
#        if seek > 0 and seek !='':
#            while not self.isPlaying(): #<== The should be    while self.isPlaying():
#                print "LOOP"
#                xbmc.sleep(500)
#            xbmc.sleep(2000)
#            print "SEEK "+str(seek)
#            self.time = float(seek)
#            self.seekTime(float(seek))

    def playNext(self, service, package):
        (mediaURLs, package) = service.getPlaybackCall(package)

        options = []
        mediaURLs = sorted(mediaURLs)
        for mediaURL in mediaURLs:
            options.append(mediaURL.qualityDesc)
            if mediaURL.qualityDesc == 'original':
                originalURL = mediaURL.url

        playbackURL = ''
        playbackQuality = ''
        playbackPath = ''
        ret = xbmcgui.Dialog().select(service.addon.getLocalizedString(30033),
                                      options)
        playbackURL = mediaURLs[ret].url
        playbackQuality = mediaURLs[ret].quality
        item = xbmcgui.ListItem(package.file.displayTitle(),
                                iconImage=package.file.thumbnail,
                                thumbnailImage=package.file.thumbnail,
                                path=playbackURL + '|' +
                                service.getHeadersEncoded(service.useWRITELY))
        item.setInfo(type="Video", infoLabels={"Title": package.file.title})
        self.PlayStream(
            playbackURL + '|' + service.getHeadersEncoded(service.useWRITELY),
            item, 0, package)

    def playList(self, service):
        while self.current < len(self.mediaItems) and not self.isExit:
            self.playNext(service, self.mediaItems[self.current])
            current = self.current
            while current == self.current and not self.isExit:
                xbmc.sleep(3000)

    def onPlayBackStarted(self):
        print "PLAYBACK STARTED"
        #        if self.seek > 0:
        #            self.seekTime(self.seek)
        if self.seek > 0 and self.seek != '':
            #            while not self.isPlaying(): #<== The should be    while self.isPlaying():
            #                print "LOOP"
            #                xbmc.sleep(500)
            #            xbmc.sleep(2000)
            print "SEEK " + str(self.seek)
            self.time = float(self.seek)
            self.seekTime(float(self.seek))

    def onPlayBackEnded(self):
        print "PLAYBACK ENDED"
        #        self.next()
        if self.package is not None:
            self.service.setProperty(self.package.file.id, 'playcount',
                                     int(self.package.file.playcount) + 1)

            #try:

            #    self.service.gSpreadsheet.setMediaStatus(self.worksheet,self.package, watched=1)
            #except: pass
        self.current = self.current + 1
        self.isExit = True

    def onPlayBackStopped(self):
        print "PLAYBACK STOPPED"
        if self.package is not None:
            try:
                self.service.gSpreadsheet.setMediaStatus(self.worksheet,
                                                         self.package,
                                                         resume=self.time)
            except:
                pass
        #self.current = self.current +1
        self.isExit = True
#        if not self.isExit:
#            print "don't exit"

    def onPlayBackPaused(self):
        print "PLAYBACK Paused"
        #self.seekTime(10)

    def seekTo(self, seek):
        if seek != '':
            self.seek = float(seek)
#        self.tvScheduler.setVideoWatched(self.worksheet, self.content[self.current][0])
        if seek > 0 and seek != '':
            while not self.isPlaying(
            ):  #<== The should be    while self.isPlaying():
                print "LOOP"
                xbmc.sleep(500)
            xbmc.sleep(2000)
            print "SEEK " + str(seek)
            self.time = float(seek)
            self.seekTime(float(seek))
示例#27
0
class gPlayer(xbmc.Player):

    try:

        import pysrc.pydevd as pydevd
        # stdoutToServer and stderrToServer redirect stdout and stderr to eclipse console
        pydevd.settrace('localhost', stdoutToServer=True, stderrToServer=True)
    except :
        pass

    def __init__( self, *args, **kwargs ):
        xbmc.Player.__init__( self )
        self.isExit = False
        self.seek = 0
        self.package = None
        self.time = 0
        self.service = None
        self.current = 1
        self.playStatus = False
        self.currentURL = ''


    def setService(self,service):
        self.service = service

    def setWorksheet(self,worksheet):
        self.worksheet = worksheet


    def setContent(self, episodes):
        self.content = episodes
        self.current = 0

    def setMedia(self, mediaItems):
        self.mediaItems = mediaItems
        self.current = 0

    def next(self):

#            log('video ' + str(episodes[self.current][CONSTANTS.D_SOURCE]) + ',' + str(episodes[self.current][CONSTANTS.D_SHOW]))

#        addVideo('plugin://plugin.video.gdrive?mode=playvideo&amp;title='+episodes[video][0],
#                             { 'title' : str(episodes[video][CONSTANTS.D_SHOW]) + ' - S' + str(episodes[video][CONSTANTS.D_SEASON]) + 'xE' + str(episodes[video][CONSTANTS.D_EPISODE]) + ' ' + str(episodes[video][CONSTANTS.D_PART])  , 'plot' : episodes[video][CONSTANTS.D_SHOW] },
#                             img='None')
        # play video
#            if self.isExit == 0:
                self.play('plugin://plugin.video.OTV_MEDIA/?mode=12&url='+str(self.service)+'&title='+self.content[self.current][0])
                #self.play('plugin://plugin.video.gdrive/?mode=video&instance='+str(self.service.instanceName)+'&title='+self.content[self.current][0])
#                self.play(self.content[self.current][0])

#                self.tvScheduler.setVideoWatched(self.worksheet, self.content[self.current][0])
#                self.tvScheduler.createRow(self.worksheet, '','','','')
                if self.current < len(self.content):
                    self.current += 1
                else:
                    self.current = 0


    def saveTime(self):
        try:
            newTime = self.getTime()
            if newTime > self.seek:
                self.time = newTime
        except:
            pass
    def playStream(self, urlm, **kwargs):
	for url,title in urlm:  
          self._initStream(title, url, **kwargs)
    def _initStream(self, title, url):
	 self.url = url 
	 self.title = title 
                
	 if isinstance(url, unicode):
		url = url.encode('utf-8', 'ignore')
	 if isinstance(title, unicode):
		title= title.encode('utf-8', 'ignore')
         self.addLink('[COLOR lightblue][B]OTV MEDIA >>  [/B][/COLOR]'+title,url,'')
    def PlayStream(self, url, item, seek, startPlayback=True, package=None):

        self.currentURL = url
        if startPlayback:
            self.play(url, item)
            if self.service.settings:
                xbmc.log(self.service.addon.getAddonInfo('name') + ': Playback url ' + str(url), xbmc.LOGNOTICE)

        if package is not None:
            self.package = package

        if seek != '':
            self.seek = float(seek)
            if self.service.settings:
                xbmc.log(self.service.addon.getAddonInfo('name') + ': Seek ' + str(seek), xbmc.LOGNOTICE)

#        self.tvScheduler.setVideoWatched(self.worksheet, self.content[self.current][0])
#        if seek > 0 and seek !='':
#            while not self.isPlaying(): #<== The should be    while self.isPlaying():
#                print "LOOP"
#                xbmc.sleep(500)
#            xbmc.sleep(2000)
#            print "SEEK "+str(seek)
#            self.time = float(seek)
#            self.seekTime(float(seek))
    def __getPlayerType(self):
        oConfig = cConfig()
        sPlayerType = oConfig.getSetting('playerType')
        
        try:
            if (sPlayerType == '0'):
                cConfig().log("playertype from config: auto")
                return xbmc.PLAYER_CORE_AUTO

            if (sPlayerType == '1'):
                cConfig().log("playertype from config: mplayer")
                return xbmc.PLAYER_CORE_MPLAYER

            if (sPlayerType == '2'):
                cConfig().log("playertype from config: dvdplayer")
                return xbmc.PLAYER_CORE_DVDPLAYER
        except: return False
    def playNext(self, service, package):
            (mediaURLs, package) = service.getPlaybackCall(package)

            options = []
            mediaURLs = sorted(mediaURLs)
            for mediaURL in mediaURLs:
                options.append(mediaURL.qualityDesc)
                if mediaURL.qualityDesc == 'original':
                    originalURL = mediaURL.url

            playbackURL = ''
            playbackQuality = ''
            playbackPath = ''
            if service.settings.promptQuality:
                if len(options) > 1:
                    ret = xbmcgui.Dialog().select(service.addon.getLocalizedString(30033), options)
                else:
                    ret = 0
            else:
                ret = 0

            playbackURL = mediaURLs[ret].url
            if self.service.settings:
                xbmc.log(self.service.addon.getAddonInfo('name') + ': Play next ' + str(playbackURL), xbmc.LOGNOTICE)

            playbackQuality = mediaURLs[ret].quality
            item = xbmcgui.ListItem(package.file.displayTitle(), iconImage=package.file.thumbnail,
                                thumbnailImage=package.file.thumbnail, path=playbackURL+'|' + service.getHeadersEncoded())
            item.setInfo( type="Video", infoLabels={ "Title": package.file.title } )
            self.PlayStream(playbackURL+'|' + service.getHeadersEncoded(),item,0,package)

    def playList(self, service):
        while self.current < len(self.mediaItems) and not self.isExit:
            self.playNext(service, self.mediaItems[self.current])
            current = self.current
            while current == self.current and not self.isExit:
                xbmc.sleep(3000)

        if self.service.settings:
            xbmc.log(self.service.addon.getAddonInfo('name') + ': Exit play list', xbmc.LOGNOTICE)


    def onPlayBackStarted(self):
        print "PLAYBACK STARTED"
        self.playStatus = True
        #self.tag = xbmc.Player().getVideoInfoTag()
#        if self.seek > 0:
#            self.seekTime(self.seek)

        if self.service.settings:
            xbmc.log(self.service.addon.getAddonInfo('name') + ': Play started', xbmc.LOGNOTICE)

        if self.seek > 0 and self.seek !='':
#            while not self.isPlaying(): #<== The should be    while self.isPlaying():
#                print "LOOP"
#                xbmc.sleep(500)
#            xbmc.sleep(2000)
            print "SEEK "+str(self.seek)
            self.time = float(self.seek)
            self.seekTime(float(self.seek))
            self.seek = 0
        if self.service.settings:
            xbmc.log(self.service.addon.getAddonInfo('name') + ': Seek time ' + str(self.seek), xbmc.LOGNOTICE)


    def onPlayBackEnded(self):
        print "PLAYBACK ENDED"
#        self.next()
        if self.package is not None:
            try:
                if self.service.settings.cloudResume == '1' and  self.service.protocol == 2 and self.time > self.package.file.resume:
                    xbmc.log(self.service.addon.getAddonInfo('name') + ': PLAYBACK ENDED 1 ' + str(self.package.file.playcount), xbmc.LOGNOTICE)

                    self.service.setProperty(self.package.file.id,'resume', self.time)
                    self.service.setProperty(self.package.file.id,'playcount', int(self.package.file.playcount)+1)

                    if self.service.settings:
                        xbmc.log(self.service.addon.getAddonInfo('name') + ': Updated remote db ', xbmc.LOGNOTICE)

                elif self.service.settings.cloudResume == '2' and  self.service.protocol == 2 and (self.time/self.package.file.duration) >= int(self.service.settings.skipResume)*0.01:#and self.time > self.package.file.resume:
                    xbmc.log(self.service.addon.getAddonInfo('name') + ': PLAYBACK ENDED 2 ' + str(self.package.file.playcount), xbmc.LOGNOTICE)

                    self.service.gSpreadsheet.setMediaStatus(self.service.worksheetID,self.package, watched= int(self.package.file.playcount)+1, resume=0)
                    exp = re.search('0?(\d+)',  self.package.file.season)
                    season = exp.group(1)
                    exp = re.search('0?(\d+)',  self.package.file.episode)
                    episode = exp.group(1)
                    result = xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method": "VideoLibrary.GetEpisodes", "params": {"filter":{"and": [{"field": "season", "operator": "is", "value": "'+str(season)+'"}, {"field": "episode", "operator": "is", "value": "'+str(episode)+'"}]}}, "id": 1}')
                    exp = re.search('"episodeid":(\d+)', result)
                    episodeID = exp.group(1)
                    #xbmc.executeJSONRPC('{"params": {"episodeid": '+str(episodeID)+', "resume": {"position": '+str(self.time)+', "total":  '+str(self.package.file.duration)+'}}, "jsonrpc": "2.0", "id": "setResumePoint", "method": "VideoLibrary.SetEpisodeDetails"}')
                    xbmc.executeJSONRPC('{"params": {"episodeid": '+str(episodeID)+', "playcount": '+str(self.package.file.playcount+1)+'}, "jsonrpc": "2.0", "id": "setResumePoint", "method": "VideoLibrary.SetEpisodeDetails"}')

                    if self.service.settings:
                        xbmc.log(self.service.addon.getAddonInfo('name') + ': Updated local db ', xbmc.LOGNOTICE)


            except: pass


            #try:

            #    self.service.gSpreadsheet.setMediaStatus(self.worksheet,self.package, watched=1)
            #except: pass
        self.current = self.current +1
        self.isExit = True
        self.playStatus = False


    def onPlayBackStopped(self):
        print "PLAYBACK STOPPED"
        if self.package is not None:
            try:
                if self.service.settings.cloudResume == '1' and  self.service.protocol == 2 and float(self.time) > float(self.package.file.resume):
                    xbmc.log(self.service.addon.getAddonInfo('name') + ': PLAYBACK STOPPED 1 ' + str(self.time), xbmc.LOGNOTICE)

                    self.service.setProperty(self.package.file.id,'resume', self.time)

                    if self.service.settings:
                        xbmc.log(self.service.addon.getAddonInfo('name') + ': Updated remote db ', xbmc.LOGNOTICE)

                elif self.service.settings.cloudResume == '2' and  self.service.protocol == 2:# and float(self.time) > float(self.package.file.resume):
                    xbmc.log(self.service.addon.getAddonInfo('name') + ': PLAYBACK STOPPED 2 ' + str(self.time), xbmc.LOGNOTICE)

                    self.service.gSpreadsheet.setMediaStatus(self.service.worksheetID,self.package, resume=self.time)
                    exp = re.search('0?(\d+)',  self.package.file.season)
                    season = exp.group(1)
                    exp = re.search('0?(\d+)',  self.package.file.episode)
                    episode = exp.group(1)
                    result = xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method": "VideoLibrary.GetEpisodes", "params": {"filter":{"and": [{"field": "season", "operator": "is", "value": "'+str(season)+'"}, {"field": "episode", "operator": "is", "value": "'+str(episode)+'"}]}}, "id": 1}')
                    exp = re.search('"episodeid":(\d+)', result)
                    episodeID = exp.group(1)
                    xbmc.executeJSONRPC('{"params": {"episodeid": '+str(episodeID)+', "resume": {"position": '+str(self.time)+', "total":  '+str(self.package.file.duration)+'}}, "jsonrpc": "2.0", "id": "setResumePoint", "method": "VideoLibrary.SetEpisodeDetails"}')
                    #xbmc.executeJSONRPC('{"params": {"episodeid": '+str(episodeID)+', "playcount": '+str(self.package.file.playcount+1)+'}, "jsonrpc": "2.0", "id": "setResumePoint", "method": "VideoLibrary.SetEpisodeDetails"}')

                    if self.service.settings:
                        xbmc.log(self.service.addon.getAddonInfo('name') + ': Updated local db ', xbmc.LOGNOTICE)

            except: pass


        #self.current = self.current +1
        self.isExit = True
#        if not self.isExit:
#            print "don't exit"
        self.playStatus = False


    def onPlayBackPaused(self):
        print "PLAYBACK Paused"
        if self.seek > 0:
            self.seekTime(self.seek)
            self.seek = 0

    def seekTo(self, seek):
        if seek != '':
            self.seek = float(seek)
#        self.tvScheduler.setVideoWatched(self.worksheet, self.content[self.current][0])
        if seek > 0 and seek !='':
            while not self.isPlaying(): #<== The should be    while self.isPlaying():
                print "LOOP"
                xbmc.sleep(500)
            xbmc.sleep(2000)
            print "SEEK "+str(seek)
            self.time = float(seek)
            self.seekTime(float(seek))
            if self.service.settings:
                xbmc.log(self.service.addon.getAddonInfo('name') + ': Seek ' + str(self.time), xbmc.LOGNOTICE)

    def addLink(self,name,url,iconimage):
        ok=True
        liz=xbmcgui.ListItem(name, iconImage="DefaultVideo.png", thumbnailImage=iconimage)
        liz.setInfo( type="Video", infoLabels={ "Title": name } )
        liz.setProperty("IsPlayable", "true")
        ok=xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]),url=str(url),listitem=liz)
        xbmc.Player().play(url,liz)
        sys.exit()
        return ok