예제 #1
0
def SaveCookies(session, cookies_name="tmp_cookies"):
	try:
		path = xbmc.translatePath(os.path.join(TMP_FOLDER, cookies_name))
		session.cookies.save(filename=path, ignore_discard=True, ignore_expires=True)
		xbmc.log("Cookies saved!",1)
	except Exception as e:
		pass
예제 #2
0
def Log(message,log_level=xbmc.LOGDEBUG):
	xbmc.log(u"[Kodi4VN] {0}".format(message), log_level)
	try:
		pass
	except Exception as e:
		xbmc.log(u"Logging Failed: {0}".format(e))
		Noti("Logging Failed!!!", e)
예제 #3
0
def RetryBlogspot(url):
	for i in range(30):
		res = Request(url, method="HEAD")
		if res.status_code < 300:
			xbmc.log("blogspot link retry successfully!", 1)
			return res.url
	raise Exception('RetryBlogspot Failed!!!')
예제 #4
0
def Log(msg, level=def_loglevel):
    if level == xbmc.LOGDEBUG and s.verbLog:
        level = def_loglevel
    fi = getframeinfo(currentframe().f_back)
    msg = '[{0}]{2} {1}'.format(
        g.__plugin__, msg,
        '' if not s.verbLog else ' {}:{}'.format(opb(fi.filename), fi.lineno))
    xbmc.log(py2_encode(msg), level)
예제 #5
0
 def log(self, txt='', level=xbmc.LOGDEBUG):
     ''' Log a text into the Kodi-Logfile '''
     try:
         txt = toUnicode(txt)
         xbmc.log("[%s] %s" % (self.pluginName, txt), level)
     except:
         xbmc.log("[%s] Logging Error" % self.pluginName, xbmc.LOGERROR)
         traceback.print_exc()
예제 #6
0
def delKeyword(keyword):
    xbmc.log('keyword: ' + keyword)
    conn = sqlite3.connect(favoritesdb)
    c = conn.cursor()
    c.execute("DELETE FROM keywords WHERE keyword = ?", (keyword,))
    conn.commit()
    conn.close()
    xbmc.executebuiltin('Container.Refresh')
예제 #7
0
def addKeyword(keyword):
    xbmc.log(keyword)
    conn = sqlite3.connect(favoritesdb)
    conn.text_factory = str
    c = conn.cursor()
    c.execute("INSERT INTO keywords VALUES (?)", (keyword,))
    conn.commit()
    conn.close()
예제 #8
0
def openURL(url):
    xbmc.log("Opening %s" % url)
    req = urllib_request.Request(url)
    req.add_header('Referer', 'https://www.empflix.com/')
    response = urllib_request.urlopen(req)
    link = response.read().decode('utf-8')
    response.close()
    return link
예제 #9
0
def addSupportedLinks(gurl, name, thumbnail):
    for each in SUPPORTEDSITES:
        if each in thumbnail:
            realurl = 'https://fantasti.cc%s' % gurl
            mode = 4
            addLink(name, realurl, mode, thumbnail)
            return
    xbmc.log('Unsupported site %s' % thumbnail)
예제 #10
0
def log(msg, level=xbmc.LOGDEBUG):
    try:
        msg = str(msg)
    except:
        pass
    if DEBUG == False and level != xbmc.LOGERROR: return
    if level == xbmc.LOGERROR: msg += ' ,' + traceback.format_exc()
    xbmc.log(ADDON_ID + '-' + ADDON_VERSION + '-' + msg, level)
예제 #11
0
def regPseudoTV():
    while not MONITOR.abortRequested():
        if (xbmc.getCondVisibility('System.HasAddon(service.iptv.manager)')
                and xbmc.getCondVisibility(
                    'System.HasAddon(plugin.video.pseudotv.live)')):
            if REAL_SETTINGS.getSettingBool('iptv.enabled'):
                try:
                    # Manager Info
                    IPTV_MANAGER = xbmcaddon.Addon(id='service.iptv.manager')
                    IPTV_PATH = IPTV_MANAGER.getAddonInfo('profile')
                    IPTV_M3U = os.path.join(IPTV_PATH, 'playlist.m3u8')
                    IPTV_XMLTV = os.path.join(IPTV_PATH, 'epg.xml')
                except Exception as e:
                    xbmc.log(
                        '%s-%s-regPseudoTV failed! %s' %
                        (ADDON_ID, ADDON_VERSION, e), xbmc.LOGERROR)
                    break

                asset = {
                    'iptv': {
                        'type':
                        'iptv',
                        'name':
                        ADDON_NAME,
                        'icon':
                        ICON.replace(ADDON_PATH, 'special://home/addons/%s/' %
                                     (ADDON_ID)).replace('\\', '/'),
                        'm3u': {
                            'path': IPTV_M3U,
                            'slug': '@%s' % (slugify(ADDON_NAME))
                        },
                        'xmltv': {
                            'path': IPTV_XMLTV
                        },
                        'id':
                        ADDON_ID
                    }
                }
                asset['vod'] = [{
                    'type':
                    'vod',
                    'name':
                    'HDHomerun %s' % (LANGUAGE(30111)),
                    'description':
                    '',
                    'icon':
                    LOGO,
                    'path':
                    'plugin://%s/recordings/All' % (ADDON_ID),
                    'id':
                    ADDON_ID
                }]
                xbmcgui.Window(10000).setProperty(PROP_KEY, json.dumps(asset))
                WAIT_TIME = 900
            else:
                xbmcgui.Window(10000).clearProperty(PROP_KEY)
                WAIT_TIME = 300
        if MONITOR.waitForAbort(WAIT_TIME): break
예제 #12
0
def Request(url,
            method="GET",
            headers=DEFAULT_HEADERS,
            additional_headers=None,
            data=None,
            session=None,
            allow_redirects=True,
            timeout=10,
            load_cookies=True,
            mobile=False):
    if additional_headers:
        headers.update(additional_headers)
    try:
        session = CacheControl(session)
    except Exception as e:
        pass
        # Error("Init web cache failed!!!", e)
    if mobile:
        headers["User-Agents"] = MOBILE_IOS_AGENTS
    xbmc.log("Requests headers: {0}".format(json.dumps(headers)), 1)
    if session:
        session.headers.update(headers)
        domain = re.search("https*\://(.+?)($|/)", url).group(1)
        if load_cookies:
            LoadCookies(session, cookies_name=domain)
        if data:
            response = session.post(url,
                                    data=data,
                                    allow_redirects=allow_redirects,
                                    timeout=timeout,
                                    verify=False)
        else:
            if method == "HEAD":
                response = session.head(url,
                                        allow_redirects=allow_redirects,
                                        timeout=timeout,
                                        verify=False)
            else:
                response = session.get(url,
                                       allow_redirects=allow_redirects,
                                       timeout=timeout,
                                       verify=False)
        response.encoding = "utf8"
        SaveCookies(session, cookies_name=domain)
        return response
    else:
        if method == "HEAD":
            return requests.head(url,
                                 headers=headers,
                                 allow_redirects=allow_redirects,
                                 timeout=timeout,
                                 verify=False)
        else:
            return requests.get(url,
                                headers=headers,
                                allow_redirects=allow_redirects,
                                timeout=timeout,
                                verify=False)
예제 #13
0
 def logException(self, e, txt=''):
     ''' Logs an Exception as Error Message '''
     try:
         if txt:
             txt = toUnicode(txt)
             xbmc.log("[%s] %s\n%s" % (self.pluginName, txt, str(e)),
                      level=xbmc.LOGERROR)
     except:
         pass
예제 #14
0
def PLog(msg, loglevel=xbmc.LOGDEBUG):
    if DEBUG == 'false':
        return
    #if isinstance(msg, unicode):	# entf. mit six
    #	msg = msg.encode('utf-8')

    # loglevel = xbmc.LOGNOTICE		# s.o.
    # PLog('loglevel: ' + str(LOG_MSG))
    xbmc.log("%s --> %s" % (NAME, msg), level=LOG_MSG)
예제 #15
0
def log_message(msg, level=xbmc.LOGDEBUG):
    curr_frame = currentframe()
    xbmc.log(
        FORMAT.format(id=ADDON_ID,
                      version=ADDON_VERSION,
                      filename=os.path.basename(
                          curr_frame.f_back.f_back.f_code.co_filename),
                      lineno=curr_frame.f_back.f_back.f_lineno,
                      message=msg), level)
예제 #16
0
 def i18n(self, string_id):
     try:
         return addon.getLocalizedString(self.strings[string_id]).encode(
             'utf-8', 'ignore')
     except Exception as e:
         xbmc.log(
             '%s: Failed String Lookup: %s (%s)' %
             (get_name(), string_id, e), xbmc.LOGWARNING)
         return string_id
예제 #17
0
def SaveCookies(session, cookies_name="tmp_cookies"):
    try:
        path = xbmc.translatePath(os.path.join(TMP_FOLDER, cookies_name))
        session.cookies.save(filename=path,
                             ignore_discard=True,
                             ignore_expires=True)
        xbmc.log("Cookies saved!", 1)
    except Exception as e:
        pass
예제 #18
0
def utc_to_local(utc_dt):
    # get integer timestamp to avoid precision lost
    timestamp = calendar.timegm(utc_dt.timetuple())
    xbmc.log(str(timestamp))
    if timestamp < 1:
        timestamp = 1
    local_dt = datetime.fromtimestamp(timestamp)
    assert utc_dt.resolution >= timedelta(microseconds=1)
    return local_dt.replace(microsecond=utc_dt.microsecond)
예제 #19
0
def setLastPlayedPosition(self, recording_id, position):

    xbmc.log("setLastPlayedPosition start")
    method = 'recording.watched.set'
    method += '&recording_id=' + str(recording_id) + '&position=' + str(
        position)
    ret, result = doRequest5(self, method)
    if not ret:
        print(result)
 def __init__(self):
     self.settings = self._get_addon()
     self.addon_name = CONFIG['name']
     xbmc.log(
         self.addon_name + '.settings -> Reading settings configuration',
         xbmc.LOGDEBUG)
     self.stream = self.settings.getSetting('streaming')
     self.picture_mode = False
     self._settings = {}
예제 #21
0
def main():
    if xbmc.getInfoLabel('Window(10000).Property(script.plex.service.started)'):
        # Prevent add-on updates from starting a new version of the addon
        return

    xbmcgui.Window(10000).setProperty('script.plex.service.started', '1')

    if xbmcaddon.Addon().getSetting('kiosk.mode') == 'true':
        xbmc.log('script.plex: Starting from service (Kiosk Mode)', xbmc.LOGINFO)
        xbmc.executebuiltin('RunScript(script.plex)')
예제 #22
0
def log(msg, level=xbmc.LOGDEBUG):
    try:
        msg = str(msg)
    except Exception as e:
        'log str failed! %s' % (str(e))
    if not DEBUG and level != xbmc.LOGERROR: return
    try:
        xbmc.log('%s-%s-%s' % (ADDON_ID, ADDON_VERSION, msg), level)
    except Exception as e:
        'log failed! %s' % (e)
 def _write_message(cls, message, level=xbmc.LOGDEBUG):
     # type: (Text, int) -> None
     curr_frame = inspect.currentframe()
     xbmc.log(
         cls.FORMAT.format(id=ADDON_ID,
                           version=ADDON_VERSION,
                           filename=os.path.basename(
                               curr_frame.f_back.f_back.f_code.co_filename),
                           lineno=curr_frame.f_back.f_back.f_lineno,
                           message=message), level)
예제 #24
0
def PLog(msg, loglevel=xbmc.LOGDEBUG):
	if DEBUG == 'false':
		return
	#if isinstance(msg, unicode):	# entf. mit six
	#	msg = msg.encode('utf-8')
	
	loglevel = xbmc.LOGNOTICE
	# PLog('loglevel: ' + str(loglevel))
	if loglevel >= 2:
		xbmc.log("%s --> %s" % (NAME, msg), level=loglevel)
예제 #25
0
파일: common.py 프로젝트: dokho33/xbmc
def Log(msg, level=xbmc.LOGNOTICE):
    from inspect import currentframe, getframeinfo
    from os.path import basename as opb
    if level == xbmc.LOGDEBUG and var.verbLog:
        level = xbmc.LOGNOTICE
    fi = getframeinfo(currentframe().f_back)
    msg = '[{0}]{2} {1}'.format(
        pluginname, msg, '' if not var.verbLog else ' {}:{}'.format(
            opb(fi.filename), fi.lineno))
    xbmc.log(py2_encode(msg), level)
예제 #26
0
def GSheet2KSwift(url_path="0", sheet_id="", tq="select *"):
    query_url = "https://docs.google.com/spreadsheets/d/{sid}/gviz/tq?gid={gid}&headers=1&tq={tq}"
    if "@" in url_path:
        xbmc.log("Found gid@sid path", 1)
        url_path, sheet_id = url_path.split("@")
    url = query_url.format(sid=sheet_id, tq=urllib.quote(tq), gid=url_path)

    res = Request(url)
    _re = "google.visualization.Query.setResponse\((.+?)\);"
    _json = json.loads(re.search(_re, res.encode("utf8")).group(1))
예제 #27
0
def ERROR(msg=None, hide_tb=False):
    if msg:
        LOG('ERROR: {0}'.format(msg))
    if hide_tb and not DEBUG:
        errtext = sys.exc_info()[1]
        LOG('%s::%s (%d) - %s' %
            (msg or '?', sys.exc_info()[2].tb_frame.f_code.co_name,
             sys.exc_info()[2].tb_lineno, errtext))
        return
    xbmc.log(traceback.format_exc(), xbmc.LOGINFO)
예제 #28
0
def apply_filter(filters):
	API_URL = 'http://www.einthusan.com/webservice/filters.php'
	result = HTTPInterface.http_post(API_URL, data=filters)
	response_json = {}
	try:
		response_json = json.loads(result)
	except ValueError:
		xbmc.log("Value Error: Error when decoding JSON", level=LOGERROR)
		xbmc.log(result, level=LOGERROR)
	return  response_json
예제 #29
0
 def _error(self):
     type, value, traceback = sys.exc_info()
     filename = traceback.tb_frame.f_code.co_filename
     linenumber = traceback.tb_lineno
     name = traceback.tb_frame.f_code.co_name
     errortype = type.__name__
     errormessage = str(errortype) + ' -> ' + str(value.msg)
     parameters = [filename, linenumber, name, errormessage]
     parameters = ' | '.join([str(parameter) for parameter in parameters])
     xbmc.log('control.addonInfo(name) ORION [ERROR]: ' + parameters, xbmc.LOGERROR)
예제 #30
0
def save_move_details_to_cache(cache_db_file, id, name, picture):
    try:
        conn = sqlite3.connect(cache_db_file)
        cursor = conn.cursor()
        cursor.execute('INSERT INTO movie_detail_cache VALUES ("' + str(id) +
                       '","' + str(name) + '","' + str(picture) + '")')
        conn.commit()
    except:
        xbmc.log("Exception while saving movie detail to cache", xbmc.LOGERROR)
        return None
예제 #31
0
def LogCaller():
    frame = currentframe().f_back
    fcaller = getframeinfo(frame.f_back)
    fcallee = getframeinfo(frame)
    msg = '[{}] {}:{} called from: {}:{}'.format(g.__plugin__,
                                                 opb(fcallee.filename),
                                                 fcallee.lineno,
                                                 opb(fcaller.filename),
                                                 fcaller.lineno)
    xbmc.log(msg, Log.INFO)
예제 #32
0
def getUrl2(url):
    if familyFilter == "1":
        ff = "on"
    else:
        ff = "off"
    xbmc.log('DAILYMOTION - The url is {0}'.format(url), xbmc.LOGDEBUG)
    headers = {'User-Agent': _UA}
    cookie = {'lang': language, 'ff': ff}
    r = requests.get(url, headers=headers, cookies=cookie)
    return r.text
예제 #33
0
def SEARCH_RESULTS(url, html=False):
    # this function scrapes the search results pages
    # accepts page source code (html) for any searches where there is only one
    # page of results
    if html is False:
        xbmc.log(url)
        html = get_html(url)
    match = re.compile(r'searchVideo">.+?href="([^"]+).+?src="([^"]+).+?n>([^<]+)', re.DOTALL
                       ).findall(html)
    for gurl, thumbnail, name in match:
        addSupportedLinks(gurl, name, thumbnail)
예제 #34
0
def log_message(msg, level=xbmc.LOGDEBUG):
    curr_frame = currentframe()
    xbmc.log(
        FORMAT.format(
            id=addon_id,
            version=addon_version,
            filename=os.path.basename(curr_frame.f_back.f_back.f_code.co_filename),
            lineno=curr_frame.f_back.f_back.f_lineno,
            message=msg
        ),
        level
    )
예제 #35
0
def String(s):
	try:
		return str(s)
	except:
		try:
			return str(s.encode('utf-8','ignore'))
		except:
			try:
				return str(s.decode('utf-8','ignore').encode('utf-8','ignore'))
			except:
				xbmc.log("Convert to string failed!!!", 1)
				return s
예제 #36
0
def GSheet2KSwift(url_path="0", sheet_id="", tq="select *"):
	query_url = "https://docs.google.com/spreadsheets/d/{sid}/gviz/tq?gid={gid}&headers=1&tq={tq}"
	if "@" in url_path:
		xbmc.log("Found gid@sid path", 1)
		url_path, sheet_id = url_path.split("@")
	url = query_url.format(
		sid = sheet_id,
		tq  = urllib.quote(tq),
		gid = url_path
	)

	res = Request(url)
	_re = "google.visualization.Query.setResponse\((.+?)\);"
	_json = json.loads(re.search(_re, res.encode("utf8")).group(1))
예제 #37
0
파일: emulate.py 프로젝트: emveepee/X-NEWA
 def exitCleanUp(self):
     if xbmc.Player().isPlayingVideo():
         xbmc.Player().stop()
         self.renderstop = False
         while self.state == videoState.playing:
             xbmc.sleep(100)
     import glob
     fileNames = glob.glob(xbmc.translatePath('special://temp') + 'knew5/emulate*.png' )
     for file in fileNames:
         try:
             os.remove(file)
         except:
             xbmc.log('Error deleting ' + file)
     self.exit = True
     self.close()
예제 #38
0
파일: emulate.py 프로젝트: emveepee/X-NEWA
    def getContext(self):
        if self.settings.XNEWA_CONTEXT_POP == False:
            self.exitCleanUp()
            return
        url = None
        keyBase = ''
        dialog = xbmcgui.Dialog()
        value = dialog.select( 'Enter selection', [  'Remote Keys', 'Recordings',  'TV Guide',  'Main Menu', 'Exit Web Client', '0', '1', '2', '3', '4', '5','6', '7', '8', '9'])
        xbmc.log(str(value))

        if value == 4:
            self.exitCleanUp()
        elif value == 2:
            url = keyBase + '112'
        elif value == 1:
            url = keyBase + '119'
        elif value == 3:
            url = keyBase + '120'
        elif value == 0:
            value = dialog.select( 'Navigation Selection', [ 'Home', 'Page Up', 'Page Down', 'Fast Forward', 'Rewind', 'Skip Next', 'Skip Previous', 'Red', 'Green', 'Yellow', 'Blue'])
            xbmc.log(str(value))
            if value == 0:
                url = keyBase + '36'
            elif value == 1:
                url = keyBase + '33'
            elif value == 2:
                url = keyBase + '34'
            elif value == 3:
                url = keyBase + str(70|0x20000)
            elif value == 4:
                url = keyBase + str(82|0x20000)
            elif value == 5:
                url = keyBase + str(39|0x20000)
            elif value == 6:
                url = keyBase + str(37|0x20000)
            elif  value == 7:
                url = keyBase + str(82|0x40000)
            elif  value == 8:
                url = keyBase + str(71|0x40000)
            elif  value == 9:
                url = keyBase + str(89|0x40000)
            elif  value == 10:
                url = keyBase + str(66|0x40000)
        elif  value >=5 and value <= 14:
            url = keyBase + str(value + 43)
        return url
예제 #39
0
def Request(
	url,
	method="GET",
	headers=DEFAULT_HEADERS,
	additional_headers=None,
	data=None,
	session=None,
	allow_redirects=True,
	timeout=10,
	load_cookies=True,
	mobile=False
):
	if additional_headers:
		headers.update(additional_headers)
	try:
		session = CacheControl(session)
	except Exception as e:
		pass
		# Error("Init web cache failed!!!", e)
	if mobile:
		headers["User-Agents"] = MOBILE_IOS_AGENTS
	xbmc.log("Requests headers: {0}".format(json.dumps(headers)), 1)
	if session:
		session.headers.update(headers)
		domain = re.search("https*\://(.+?)($|/)", url).group(1)
		if load_cookies:
			LoadCookies(session, cookies_name=domain)
		if data:
			response = session.post(url, data=data, allow_redirects=allow_redirects, timeout=timeout, verify=False)
		else:
			if method == "HEAD":
				response = session.head(url, allow_redirects=allow_redirects, timeout=timeout, verify=False)
			else:
				response = session.get(url, allow_redirects=allow_redirects, timeout=timeout, verify=False)
		response.encoding = "utf8"
		SaveCookies(session, cookies_name=domain)
		return response
	else:
		if method == "HEAD":
			return requests.head(url, headers=headers, allow_redirects=allow_redirects, timeout=timeout, verify=False)
		else:
			return requests.get(url, headers=headers, allow_redirects=allow_redirects, timeout=timeout, verify=False)
예제 #40
0
파일: emulate.py 프로젝트: emveepee/X-NEWA
    def render(self):
        fullRefresh = 0
        while xbmc.abortRequested == False and self.exit == False:
            if not xbmc.Player().isPlayingVideo():
                if self.state == videoState.started:
                    if isinstance(self.t1, Thread):
                        #print self.t1.is_alive(), self.renderstop, self.state, xbmc.Player().isPlayingVideo()
                        if self.t1.isAlive() == False:
                            self.state = videoState.error
                        elif xbmc.Player().isPlayingAudio():
                            self.state = videoState.inactive

                if self.renderstop == False:
                    fullRefresh += 1
                    if fullRefresh < 30 and self.state == videoState.inactive:
                        if self.inControl == False and self.xnewa.sid != None:
                            self.getActivity(True)
                            if self.renderstop == True:
                                self.renderstop = False
                                self.getScreen()
                                self.getActivity()

                    else:
                        fullRefresh = 0
                        import glob
                        fileNames = glob.glob(xbmc.translatePath('special://temp') + 'knew5/emulate*.png' )
                        for file in fileNames:
                            try:
                                os.remove(file)
                            except:
                                xbmc.log('Error deleting ' + file)

                        if self.state == videoState.playing or self.state == videoState.error or self.state == videoState.stopped:
                            if self.sdlmode != SDL.disabled:
                                if self.skipStop == False:
                                    try:
                                        url = self.base + '/control?media=stop'
                                        if self.state == videoState.error:
                                            url += '&message=Player%20error'
                                        url += self.xnewa.client
                                        screenFile1 = xbmc.translatePath('special://temp') + 'knew5/emulate-'+ str(time.time()) + '.png'
                                        xbmc.log(url)
                                        pngfile = urlopen(url)
                                        pngfile.close()
                                    except Exception as err:
                                        print(err)
                                else:
                                    self.skipStop = False

                            self.setOSDMode(True)
                            self.sidUpdate()
                            self.state = videoState.inactive

                            url = self.base + '/control?key=131188' + self.xnewa.client
                            xbmc.log(url)
                            try:
                                jpgfile = urlopen(url)
                                screenFile = xbmc.translatePath('special://temp') + 'knew5/emulate-'+ str(time.time()) + '.png'
                                output = open(screenFile,'wb')
                                output.write(jpgfile.read())
                                output.close()
                                self.image.setImage(screenFile,False)
                                self.getActivity()
                            except err:
                                print(err)

                xbmc.sleep(1000)

            else:
                self.state = videoState.playing
                if self.sdlmode == SDL.full:
                    if self.wasFullScreen:
                        if xbmc.getCondVisibility('videoplayer.isfullscreen') == 0:
                            self.wasFullScreen = False
                            url = self.base + '/control?move=49x57'  + self.xnewa.client
                            screenFile1 = xbmc.translatePath('special://temp') + 'knew5/emulate-a'+ str(time.time()) + '.png'
                            xbmc.log(url)
                            try:
                                pngfile = urlopen(url)
                                output = open(screenFile1,'wb')
                                output.write(pngfile.read())
                                output.close()
                                pngfile.close()
                                self.image.setImage(screenFile1,False)
                                self.getActivity()
                            except Exception as err:
                                print(err)
                    try:
                        url = self.base + '/control?media=' + str(xbmc.Player().getTime())  + self.xnewa.client
                        screenFile1 = xbmc.translatePath('special://temp') + 'knew5/emulate-'+ str(time.time()) + '.png'
                        xbmc.log(url)
                        request = Request(url)
                        pngfile = urlopen(request)
                        if pngfile.code == 200 and xbmc.getCondVisibility('videoplayer.isfullscreen') == 0:
                            output = open(screenFile1,'wb')
                            output.write(pngfile.read())
                            output.close()
                            self.image.setImage(screenFile1,False)
                            # needs rendering always true so just
                            self.getActivity()
                        elif pngfile.code == 204:
                            self.setOSDMode(False)
                        else:
                            print(pngfile.code)
                        pngfile.close()
                        self.skipStop = False
                    except Exception as err:
                        print(err)
                        pass

                xbmc.sleep(1000)
        return
예제 #41
0
 def log(message, level=xbmc.LOGDEBUG):
     xbmc.log('{0}: {1}'.format(ADDON_ID, message), level)
예제 #42
0
파일: emulate.py 프로젝트: emveepee/X-NEWA
    def onAction(self, action):
        try:
            actionID = action.getId()
            buttonID = action.getButtonCode()
        except: return
        if buttonID & 0x1000000:
            #these are long presses
            if actionID not in CONTEXT_MENU and buttonID not in CONTEXT_MENU:
                return

        if actionID == ACTION_MOUSE_MOVE:
            return
        ignoreKeys = ( 61650, 61651, 127184, 127185, 323749, 323796 )
        if buttonID in ignoreKeys:
            return
        if not self.ready or self.renderstop:
            return
        dt = datetime.datetime.now()
        now = int(time.mktime(dt.timetuple()))
        if now == self.recent[0]:
            if self.recent[1] == 2:
                xbmc.log('too fast')
                return
            self.recent[1] = self.recent[1] + 1
        else:
            self.recent[0] = now
            self.recent[1] = 0
        retval = self.onLiveAction(actionID,buttonID)
        xbmc.log(str(retval))
        if retval == True:
            return

        self.renderstop = True
        self.inControl = True
        screenFile = xbmc.translatePath('special://temp') + 'knew5/emulate-'+ str(time.time()) + '.png'
        keyBase = self.base + '/control?time=' + str(now) + '&key='
        url = None
        pauseActivity = True
        if actionID == ACTION_PLAYER_PLAY:
            url = keyBase + str(80|0x20000)
        elif actionID == ACTION_STOP:
            url = keyBase + str(83|0x20000)
            self.state = videoState.stopped
        elif actionID == ACTION_NEXT_ITEM:
            if buttonID & 0xf046 == 0xf046 :
                # NextPVR Ctrl-F
                url = keyBase + str(70|0x20000)

            else:
                url = keyBase + str(39|0x20000)
        elif actionID == ACTION_PREV_ITEM:
            if '/live?channel=' not in xbmc.Player().getPlayingFile():
                url = keyBase + str(37|0x20000)
            else:
                # send ctrl-w
                url =  keyBase + str(87|0x20000)
        elif actionID == ACTION_PLAYER_FORWARD:
            url = keyBase + str(70|0x20000)
        elif actionID == ACTION_PLAYER_REWIND:
            url = keyBase + str(82|0x20000)
        elif actionID == ACTION_FIRST_PAGE or actionID == ACTION_INFO:
            #home
            if self.state == videoState.playing:
                # send ctrl-b
                url = keyBase + str(66|0x20000)
            else:
                url = keyBase + '36'
            pauseActivity = False
        elif buttonID >= 0x2f041 and buttonID <= 0x2f05a:
            url = keyBase + str(buttonID&0xff)
        elif buttonID & 0x10000:
            ctrl = buttonID&0xff
            if ctrl == 0x50:
                url = keyBase + str(ctrl|0x20000)
            elif ctrl == 0x53:
                url = keyBase + str(ctrl|0x20000)
                self.renderstop = False
                xbmc.Player().stop()
            elif ctrl == 0x4b:
                url = keyBase + str(ctrl|0x20000)
            elif ctrl == 0x52:
                url = keyBase + str(ctrl|0x20000)
            elif ctrl == 0x82:
                url = keyBase + str(37|0x20000)
            elif ctrl == 0x83:
                url = keyBase + str(39|0x20000)
            elif ctrl == 0x42:
                url = keyBase + str(80|0x20000)
            elif ctrl == 0x46:
                url = keyBase + str(70|0x20000)
            elif ctrl == 0x57:
                url =  keyBase + str(87|0x20000)
            elif ctrl == 0x47:
                url = keyBase + str(112)
            elif ctrl == 0x4d and buttonID & 0x30000:
                myKey = self.getContext()
                if myKey != None:
                    url = keyBase + myKey
            elif ctrl == 0x4f:
                url = keyBase + str(119)
            elif ctrl == 0x54:
                url = keyBase + str(113)
            else:
                pass
                #print actionID, buttonID, hex(ctrl), hex(actionID)
        elif actionID == ACTION_RECORD or actionID == ACTION_QUEUE_ITEM:
            url = keyBase + str(75|0x20000)
        elif actionID == ACTION_PAUSE:
            url = keyBase + '32'
        elif buttonID == 0xf02e:
            url = keyBase + '46'
        elif actionID in MOVEMENT_LEFT:
            url = keyBase + '37'
        elif actionID in MOVEMENT_UP:
            url = keyBase + '38'
            if xbmc.Player().isPlayingVideo():
                if '/live?channel=' not in xbmc.Player().getPlayingFile() and self.osdMode == False:
                    url = keyBase + str(70|0x20000)
            else:
                pauseActivity = False
        elif actionID in MOVEMENT_RIGHT:
            url = keyBase + '39'
        elif actionID in MOVEMENT_DOWN or buttonID == 0xf064:
            url = keyBase + '40'
            if xbmc.Player().isPlayingVideo():
                if '/live?channel=' not in xbmc.Player().getPlayingFile() and self.osdMode == False:
                    url = keyBase + str(82|0x20000)
            else:
                pauseActivity = False
        elif actionID in MOVEMENT_SCROLL_UP:
            url = keyBase + '33'
        elif actionID in MOVEMENT_SCROLL_DOWN:
            url = keyBase + '34'
        elif actionID >= 58 and actionID <= 67:
            url = keyBase + str(actionID-10)
        elif actionID >= 142 and actionID <= 149:
            url = keyBase + str(actionID-92)
        elif actionID == ACTION_SELECT_ITEM:
            url = keyBase + '13'
        elif actionID == KEYBOARD_BACK or buttonID == 61575:
            url = keyBase + '8'
        elif actionID in EXIT_SCRIPT:
            url = keyBase + '27'
        elif actionID in CONTEXT_MENU or buttonID in CONTEXT_MENU or actionID == ACTION_MOUSE_DOUBLE_CLICK:
            myKey = self.getContext()
            if myKey != None:
                url = keyBase + myKey
        elif actionID == ACTION_TELETEXT_RED:
            url = keyBase + str(82|0x40000)
        elif actionID == ACTION_TELETEXT_GREEN:
            url = keyBase + str(71|0x40000)
        elif actionID == ACTION_TELETEXT_YELLOW:
            url = keyBase + str(89|0x40000)
        elif actionID == ACTION_TELETEXT_BLUE:
            url = keyBase + str(66|0x40000)
        elif buttonID >= 0xf030 and buttonID <= 0xf039:
            url = keyBase + str(buttonID-0xf030+48)
        elif buttonID >= 0xf041 and buttonID <= 0xf05a:
            if self.state == videoState.playing and buttonID == 0xf05a:
                buttonID = 118
            url = keyBase + str(buttonID&0xff)
        elif buttonID >= 0xf090 and buttonID <= 0xf098:
            url = keyBase + str((buttonID&0xff)-32)
        elif buttonID == 0xf09b:
            #F12 exit
            self.exitCleanUp()
        elif buttonID == 0x4f092:
            #alt-f4'
            url = keyBase + str(0x40073)
        elif buttonID & 0x40000 or buttonID & 0x20000:
            buttonID = buttonID | 0x40000
            url = keyBase + str(buttonID&0x400ff)
        elif actionID == 122 or actionID == 999 :
            if buttonID == 50:
                #guide
                url = keyBase + '112'
            elif buttonID == 49 or buttonID == 101:
                # recordings
                url = keyBase + '119'
            elif buttonID == 24:
                #live tv
                url = keyBase + '113'
            elif buttonID == 7:
                #my videos
                url = keyBase + '114'
            elif buttonID == 9:
                #my music
                url = keyBase + '115'
            elif buttonID == 6:
                #my pictures
                url = keyBase + '116'
            elif buttonID == 248:
                #my radio
                url = keyBase + '117'
            elif buttonID == 44:
                #subtitle
                xbmc.executebuiltin('Action( NextSubtitle )')
            elif buttonID == 196:
                # power off
                self.exitCleanUp()
                pass
            elif buttonID == 213:
                #display
                url = keyBase + '119'
            else:
                xbmc.log('remote action unsupported {0} {1}'.format(actionID, buttonID))
                pass
        else:
            xbmc.log('action unsupported {0} {1}'.format(actionID, buttonID))
            pass
        if url :
            url = url + self.xnewa.client
            #while self.rendering:
            #    time.sleep(0.1)
            xbmc.log(url)
            try:
                jpgfile = urlopen(url)
                output = open(screenFile,'wb')
                output.write(jpgfile.read())
                output.close()
                jpgfile.close()
                self.setOSDMode(True)
                self.image.setImage(screenFile,False)
                xbmc.sleep(25)
            except HTTPError as err:
                xbmc.log(str(err.code))
                print(err)
            except URLError as err:
                print(err)
                self.exit = True
                self.close()
            except Exception as err:
                if err.errno != 104 and err.errno != 10054:
                    print(err)
                    self.exit = True
                    self.close()
                else:
                    xbmc.log('ignoring known error')
            if pauseActivity:
                    self.getActivity()
        self.renderstop = False
        self.inControl = False
        self.ready = True
예제 #43
0
파일: emulate.py 프로젝트: emveepee/X-NEWA
 def onLiveAction(self,actionID,buttonID):
     retval = False
     if xbmc.Player().isPlayingVideo():
         if self.sdlmode != SDL.disabled:
             #xbmc.log('video {0} {1}'.format(actionID, buttonID))
             if buttonID == 0xf049 or buttonID == 0x1f042 or buttonID == 0x4f042:
                 # toggle OSD
                 if self.win.getProperty('showosd') == 'true':
                     self.setOSDMode(False)
                 else:
                     self.setOSDMode(True)
             elif (actionID == 26 and buttonID != 0) or buttonID == 0xf023  or buttonID == 0xf054:
                 #subtitle from remote or #
                 xbmc.executebuiltin('Action( NextSubtitle )')
                 retval = True
             elif actionID == REMOTE_BACK or actionID == ACTION_BACK or actionID == ACTION_SHOW_GUI:
                 if self.osdMode == False:
                     xbmc.executebuiltin('ActivateWindow(fullscreenvideo)')
                     self.wasFullScreen = True
                     self.setOSDMode(True)
                     retval = True
             elif actionID == ACTION_PLAYER_FORWARD:
                 xbmc.executebuiltin('PlayerControl(tempoup)')
                 retval = True
             elif actionID == ACTION_SHOW_OSD or actionID == ACTION_SELECT_ITEM:
                 if '/live?channel=' not in xbmc.Player().getPlayingFile() and self.osdMode == False:
                     xbmc.executebuiltin('Action(OSD,fullscreenvideo)')
                     retval = True
             elif actionID == ACTION_PLAYER_REWIND:
                 xbmc.executebuiltin('PlayerControl(tempodown)')
                 retval = True
             elif actionID == ACTION_BUILT_IN_FUNCTION:
                 if buttonID == 0xf04d:
                     #xbmc.executebuiltin('Action(OSD,fullscreenvideo)')
                     pass
                 retval = True
             elif buttonID == 0xf027 or actionID == ACTION_SMALL_STEP_BACK:
                 # 'small step'
                 xbmc.executebuiltin('Seek(-7))')
                 retval = True
             elif buttonID == 0x4f059:
                 #alt y
                 xbmc.executebuiltin('ActivateWindow(osdvideosettings)')
                 retval = True
             elif buttonID == 0x4f047 or actionID == 25:
                 #alt g
                 xbmc.executebuiltin('ActivateWindow(osdaudiosettings)')
                 retval = True
             elif buttonID == 0xf04f:
                 xbmc.executebuiltin('ActivateWindow(PlayerProcessInfo)')
                 retval = True
             elif buttonID == 0xf05a or buttonID == 0xf096 or actionID == ACTION_ASPECT_RATIO:
                 xbmc.executebuiltin('Action(AspectRatio,fullscreenvideo)')
                 retval = True
             elif actionID == ACTION_CONTEXT_MENU and self.settings.XNEWA_CONTEXT_STOP == True:
                 xbmc.Player().stop()
                 retval = True
             #print 'video pass', actionID, buttonID, retval
         else:
             xbmc.log('video {0} {1}'.format(actionID, buttonID))
             if self.settings.XNEWA_LIVE_SKIN:
                 self.debug.setLabel('actionID: ' + str(actionID) + ' buttonID: ' + str(hex(buttonID)))
             if actionID == REMOTE_BACK:
                 xbmc.executebuiltin('ActivateWindow(fullscreenvideo)')
                 self.wasFullScreen = True
                 self.setOSDMode(True)
             retval = True
     return retval
예제 #44
0
파일: emulate.py 프로젝트: emveepee/X-NEWA
    def getScreen(self, force=False):
        self.rendering = True
        self.errors = 0
        retval = True
        try:
            if force:
                if self.xnewa.AreYouThere(self.settings.usewol(), self.settings.NextPVR_MAC, self.settings.NextPVR_BROADCAST):
                    url = self.base + '/control?size=' + self.settings.XNEWA_CLIENT_SIZE
                    if self.settings.XNEWA_CLIENT_QUALITY == True:
                        url += '&quality=high'
                    url += self.xnewa.client
                    xbmc.log(url)
                    try:
                        jpgfile = urlopen(url)
                        jpgfile.close
                        if self.sdlmode != SDL.disabled:
                            try:
                                url = self.base + '/control?media=stop' + self.xnewa.client
                                xbmc.log(url)
                                pngfile = urlopen(url)
                                pngfile.close()
                            except Exception as err:
                                print(err)

                    except HTTPError as e:
                        print(e.code)
                        if e.code == 404:
                            xbmc.sleep(500)
                            url = self.base + '/control?media=stop' + self.xnewa.client
                            xbmc.log(url)
                            pngfile = urlopen(url)
                            pngfile.close()
                            self.errors = self.errors + 1
                        elif e.code == 403:
                            self.sidUpdate()
                            self.getSid()
                            self.errors = self.errors + 1
                        else:
                            print(e)
                            self.exit = True
                            self.close()
                            return False
                        if self.errors < 3:
                            self.getScreen(force)
                            return False
                    except URLError as err:
                        print(err)
                        self.exit = True
                        self.close()

                else:
                    self.exit = True
                    self.close()
                    return False


            screenFile = xbmc.translatePath('special://temp') + 'knew5/emulate-'+ str(time.time()) + '.png'

            url = self.base + '/control?format=json' + self.xnewa.client
            #xbmc.log(url)
            try:
                self.setOSDMode(True)
                jpgfile = urlopen(url)
                output = open(screenFile,'wb')
                output.write(jpgfile.read())
                output.close()
                self.image.setImage(screenFile,False)
            except HTTPError as e:
                xbmc.log(url)
                xbmc.log(str(e.code))
                retval = False
            except URLError as err:
                xbmc.log(url)
                print(err)
                xbmc.log('Abort emulation')
                self.exit = True
                self.close()
                retval = False

        except Exception as err:
            print(err)
            retval = False

        self.rendering = False
        return retval
예제 #45
0
파일: emulate.py 프로젝트: emveepee/X-NEWA
 def getActivity(self, update=False):
     if update:
         url = self.base + '/activity?format=json&updates=1'  + self.xnewa.client
     else:
         url = self.base + '/activity?format=json' + self.xnewa.client
     import json
     print (url)
     try:
         json_file = urlopen(url)
         jsonActivity = json.load(json_file)
         json_file.close()
         print(jsonActivity)
         #xbmc.log(jsonActivity)
         if 'url' in jsonActivity:
             import re
             if jsonActivity['url'] != '':
                 self.nextUrl = re.sub('[^?&]*client[^&]+&*','',jsonActivity['url'],re.UNICODE)
                 m = re.search('seek=(\d+)&', self.nextUrl)
                 if m:
                     seek  = int(m.group(1))
                     self.nextUrl = re.sub('seek=(\d+)&','',self.nextUrl)
                     if 'recording_resume' not in jsonActivity:
                         if self.state == videoState.playing:
                             xbmc.Player().seekTime(seek)
                             return
                         else:
                             jsonActivity['recording_resume'] = seek
                 self.nextUrl = unquote(self.nextUrl)
                 if self.state == videoState.playing:
                     self.skipStop = True
                 self.quickPlayer(jsonActivity)
         elif 'playlist' in jsonActivity:
             self.quickPlayer(jsonActivity)
         elif 'action' in jsonActivity:
             if jsonActivity['action'] == 'exit':
                 self.exit = True
                 xbmc.sleep(250)
                 import glob
                 fileNames = glob.glob(xbmc.translatePath('special://temp') + 'knew5/emulate*.png' )
                 for file in fileNames:
                     try:
                         os.remove(file)
                     except:
                         xbmc.log('Leaving ' + file)
                 self.close()
                 return
         elif 'needsRendering' in jsonActivity:
             if jsonActivity['needsRendering'] ==  True:
                 if isinstance(self.t1, Thread):
                     if self.t1.is_alive()  and self.state == videoState.playing:
                         xbmc.log('player no render')
                         self.renderstop = False
                     else:
                         self.renderstop = True
                 else:
                     self.renderstop = True
         self.InControl = False
     except URLError as err:
         print(err)
         self.exit = True
         self.close()
     except Exception as err:
         print(err)
예제 #46
0
파일: emulate.py 프로젝트: emveepee/X-NEWA
    def quickPlayer (self,activity):
        from . import details
        #print self.nextUrl
        Audio = False
        self.wasFullScreen = True
        windowed = self.settings.XNEWA_LIVE_SKIN
        if 'playlist' in activity:
            import os
            import re
            dd = {}
            xbmc.PlayList(0).clear()
            for playlist in activity['playlist']:
                nextUrl = re.sub('[^?&]*client[^&]+&*','',playlist['url'].encode('utf-8'))
                xbmc.log(nextUrl)
                url = nextUrl.split('=',1)[1]
                if url[0:2]=='\\\\':
                    url = 'smb:'+ url.replace('\\','/')
                if xbmcvfs.exists(url) == False:
                    s = self.base + playlist['url'].replace(' ','+').replace('&f=','&mode=http&f=')
                    xbmc.log(s)
                    xbmc.PlayList(0).add(s)
                else:
                    xbmc.PlayList(0).add(url)
            dd['movie'] = False
            dd['playlist'] = xbmc.PlayList(0)
            windowed = False
        elif self.nextUrl.startswith('/live?channel'):
            try:
                #v5
                if self.settings.XNEWA_INTERFACE == 'XML' or self.settings.XNEWA_INTERFACE == 'Version5':
                    url = self.base + '/services?method=channel.listings.current' + self.xnewa.client + '&channel_id=' + str (activity['channel_id'])
                    xbmc.log(url)
                    dd1 = self.xnewa._progs2array_xml(url)
                else:
                    url = self.base + '/public/GuideService/Listing' + self.xnewa.jsid + '&channelId=' + str (activity['channel_id'])
                    xbmc.log(url)
                    dd1 = self.xnewa._progs2array_json(url)
                dd = dd1[0]['progs'][0]
                dd['program_oid'] = dd['oid']
                #dd['season'] = 0
            except Exception as err:
                print(err)
                dd = {}
                dd['program_oid'] = 12346
                dd['title'] = activity['channel_name']
                dd['subtitle'] = str(activity['channel_number'])
                dd['end'] = ''
                dd['season'] = 0
                dd['desc'] = ''

            dd['channel_oid'] = activity['channel_id']
            channel = {}
            channel[0] = activity['channel_name']
            channel[1] = activity['channel_number']
            channel[2] = '0'
            self.prev_channel = self.channel_number
            self.channel_number = activity['channel_number']
            dd['channel'] = channel
            dd['bookmarkSecs'] = 0
            dd['movie'] = False
        elif self.nextUrl.startswith('/stream?'):
            dd = {}
            dd['title'] = 'title'
            dd['movie'] = False
            dd['filename'] = py2_decode(self.nextUrl.split('=',1)[1]).replace('http://plugin','plugin')
            dd['season'] = 0
            if 'duration' in activity:
                dd['library_duration'] = activity['duration']
            else:
                import re
                m = re.search('.*_(\d{2})(\d{2})(\d{2})(\d{2})(-\d)\.ts', dd['filename'])
                if m:
                    start = int(m.group(1)) * 60 + int(m.group(2))
                    end = int(m.group(3)) * 60 + int(m.group(4))
                    #print start
                    #print end
                    if start > end:
                        dd['library_duration'] = (start + end - 1440) * 60
                    else:
                        dd['library_duration'] = (end - start) * 60
            dd['filename'] = dd['filename'].replace('127.0.0.1',self.xnewa.ip)


            #self.getPlaybackPosition(dd['filename'])
            dd['nextUrl'] = self.nextUrl
            if 'recording_description' in activity:
                dd['desc'] = activity['recording_description']
            elif 'description' in activity:
                dd['desc'] = activity['description']
            else:
                dd['desc'] = ''

            if 'recording_title' in activity:
                dd['title'] = activity['recording_title']
            elif dd['filename'].startswith('http:'):
                if '.m3u8' not in  dd['filename']:
                    Audio = True
            elif 'title' in activity:
                dd['title'] = activity['title']

            if 'recording_subtitle' in activity:
                dd['subtitle'] = activity['recording_subtitle']
            elif 'subtitle' in activity:
                dd['subtitle'] = activity['subtitle']
            else:
                dd['subtitle'] = None

            if 'recording_resume' in activity:
                dd['bookmarkSecs'] = activity['recording_resume']
                dd['resume'] = activity['recording_resume']
            else:
                dd['bookmarkSecs'] = 0

            if 'album' in activity:
                Audio = True

            if 'recording_id' in activity:
                dd['recording_oid'] = activity['recording_id']
                dd['nextUrl'] = '/live?recording=' + dd['recording_oid']
                if self.settings.NextPVR_ICON_DL == 'Yes' and self.xnewa.getShowIcon(dd['title']) is None:
                    self.xnewa.getDetails(self.settings.NextPVR_USER,self.settings.NextPVR_PW,dd['recording_oid'],'R','Yes')
            else:
                dd['recording_oid'] = 0

            if 'Genres' in activity:
                dd['genres'] = activity['Genres']
                for  genre in dd['Genres']:
                    if genre == "Movie" or genre == "Movies" or genre == "Film":
                        dd['movie'] = True
                        break
        detailDialog = details.DetailDialog("nextpvr_recording_details.xml",  WHERE_AM_I,self.settings.XNEWA_SKIN, xnewa=self.xnewa, settings=self.settings, oid=123, epg=True, type="R")
        xbmc.log(str(windowed))
        if self.sdlmode == SDL.disabled:
            self.setOSDMode(False)
            windowed = False
        if isinstance(self.t1, Thread):
            xbmc.Player().stop()
            while self.t1.is_alive():
                xbmc.sleep(100)
            self.renderstop = False


        self.t1 = Thread(target=detailDialog._myPlayer, args=(dd,None,windowed,Audio,False))
        self.t1.start()
        self.state = videoState.started

        #xbmc.executebuiltin('XBMC.ActivateWindow(25)')
        #self.player = detailDialog.getPlayer()
        #self.player.overlay = self
        #xbmc.executebuiltin('ActivateWindow(visualisation)')
        #xbmc.executebuiltin('ActivateWindow(musicosd)')
        return
예제 #47
0
 def handle(self, record):
     if record.levelname == 'WARNING':
         xbmc.log(self.fmt.format(record), xbmc.LOGWARNING)
     if record.levelname == 'DEBUG':
         xbmc.log(self.fmt.format(record), xbmc.LOGDEBUG)
     if record.levelname == 'INFO':
         xbmc.log(self.fmt.format(record), xbmc.LOGNOTICE)
     elif record.levelname == 'ERROR':
         xbmc.log(self.fmt.format(record), xbmc.LOGERROR)
     elif record.levelname == 'CRITICAL':
         xbmc.log(self.fmt.format(record), xbmc.LOGSEVERE)
     else:
         xbmc.log(self.fmt.format(record), xbmc.LOGNOTICE)