Exemple #1
0
 def __getElsFromUrl(self, url):
     result = None
     hasMore = False
     data = self.getJson(url)
     kodiutils.log('__getElsFromUrl: {}'.format(str(data)), 4)
     if data and 'isOk' in data and data['isOk']:
         if 'response' in data:
             response = data['response']
             metadata = response[
                 'metadata'] if 'metadata' in response else {}
             if 'error' in metadata and metadata['error']:
                 kodiutils.log('Error: {}'.format(str(metadata['error'])),
                               1)
                 kodiutils.notify('Timeout caricamento dati',
                                  icon=kodiutils.getMedia('notify.png'))
                 return [], None
             if 'hasMore' in response:
                 hasMore = response['hasMore']
             elif 'pagination' in metadata:
                 pagination = metadata['pagination']
                 hitsPerPage = int(pagination['hitsPerPage']
                                   ) if 'hitsPerPage' in pagination else 0
                 totalHits = int(pagination['totalHits']
                                 ) if 'totalHits' in pagination else 0
                 if totalHits and totalHits == hitsPerPage:
                     hasMore = totalHits
             if 'entries' in response:
                 result = response['entries']
             else:
                 result = response
         elif 'entries' in data:
             result = data['entries']
     return result, hasMore
Exemple #2
0
 def menuItems(self,
               isDeletable=False,
               delete_list='',
               item_id='',
               guid='',
               context_ui=''):
     kodiutils.log(
         'menuItems: isDeletable={},delete_list={},item_id={},guid={},context_ui={}'
         .format(isDeletable, delete_list, item_id, guid, context_ui))
     menuItems = []
     if self.isAnonimous:
         return menuItems
     if isDeletable:
         if delete_list == 'favorites' and item_id:
             menuItems.append((
                 'Rimuovi (MediasetPlay)',
                 "RunPlugin(plugin://{}/?mode=contextmenu&context_menu={}&context_action=del&context_id={}&context_ui={})"
                 .format(kodiutils.ID, delete_list, item_id, context_ui)))
         elif delete_list == 'watchlist' and guid:
             menuItems.append((
                 'Rimuovi (MediasetPlay)',
                 "RunPlugin(plugin://{}/?mode=contextmenu&context_menu={}&context_action=del&context_id={}&context_ui={})"
                 .format(kodiutils.ID, delete_list, guid, context_ui)))
     else:
         if guid:
             menuItems.append((
                 'Guarda Dopo (MediasetPlay)',
                 "RunPlugin(plugin://{}/?mode=contextmenu&context_menu=watchlist&context_action=add&context_id={}&context_ui={})"
                 .format(kodiutils.ID, guid, context_ui)))
         elif item_id:
             menuItems.append((
                 'Preferiti (MediasetPlay)',
                 "RunPlugin(plugin://{}/?mode=contextmenu&context_menu=favorites&context_action=add&context_id={}&context_ui={})"
                 .format(kodiutils.ID, item_id, context_ui)))
     return menuItems
 def __init__(self):
     self.med = Mediaset()
     self.med.setUserAgent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
     self.med.log = kodiutils.log
     self.scrobblingInterval = kodiutils.getSettingAsNum(
         "scrobblingInterval")
     kodiutils.log('[mediasetservice] monitorService init')
 def __getTime(self):
     try:
         activePlayers = kodiutils.kodiJsonRequest({
             "jsonrpc": "2.0",
             "method": "Player.GetActivePlayers",
             "id": 1
         })
         playerId = int(
             activePlayers[0]['playerid']) if activePlayers else 0
         if playerId:
             result = kodiutils.kodiJsonRequest({
                 'jsonrpc': '2.0',
                 'method': 'Player.GetProperties',
                 'params': {
                     'playerid': playerId,
                     "properties": ["time", "totaltime"]
                 },
                 'id': 1
             })
             timeData = result['time'] if 'time' in result else None
             totalTime = result[
                 'totaltime'] if 'totaltime' in result else None
             return self.__calculateSeconds(
                 timeData), self.__calculateSeconds(totalTime)
     except Exception as ex:
         kodiutils.log(kodiutils.createError(ex), 1)
     return self._position, self._duration
    def run(self):
        # startup_delay = kodiutils.getSettingAsNum('startup_delay')
        # if startup_delay:
        #     kodiutils.log("Delaying startup by {} seconds.".format(startup_delay), 4)
        #     xbmc.sleep(startup_delay * 1000)

        kodiutils.log("mediasetservice started", 1)

        # setup event driven classes
        self.player = Player(action=self._dispatchQueue)
        self.monitor = Monitor(action=self._dispatchQueue)

        # start loop for events
        while not self.monitor.abortRequested():

            while len(self.dispatchQueue) and (
                    not self.monitor.abortRequested()):
                data = self.dispatchQueue.get()
                self._dispatch(data)

            if self.monitor.waitForAbort(self.scrobblingInterval):
                # Abort was requested while waiting. We should exit
                break
            else:
                self.player.transitionCheck()

        # we are shutting down
        kodiutils.log("[mediasetservice] monitorService shut down.", 1)

        # delete player/monitor
        del self.player
        del self.monitor
Exemple #6
0
 def elenco_magazine(self, newsFeedUrl, page_action=""):
     arts = self.__getDirectoryArt()
     els, nextPage, prevPage = self.med.OttieniMagazine(
         newsFeedUrl, self.iperpage)
     update_listing = (page_action == 'next' or page_action == 'prev')
     if nextPage:
         kodiutils.addListItem(kodiutils.LANGUAGE(32130), {
             'mode': 'magazine',
             'newsFeedUrl': nextPage,
             'page_action': 'next'
         },
                               properties={'SpecialSort': 'top'},
                               arts=self.__getForwardArt())
     if prevPage:
         kodiutils.addListItem(kodiutils.LANGUAGE(32129), {
             'mode': 'magazine',
             'newsFeedUrl': prevPage,
             'page_action': 'prev'
         },
                               properties={'SpecialSort': 'top'},
                               arts=self.__getBackwardArt())
     for sec in els:
         if 'metainfo' in sec and 'ddg_url' in sec['metainfo']:
             kodiutils.addListItem(sec["title"], {
                 'mode': 'magazine',
                 'ddg_url': sec['metainfo']['ddg_url']
             },
                                   arts=arts)
     kodiutils.log(('update_listing: {}').format(str(update_listing)), 4)
     kodiutils.endScript(update_listing=update_listing)
 def transitionCheck(self):
     try:
         if self.isScrobbling() and self.isPlayingVideo():
             if self._filenamePath == self.getPlayingFile():
                 self.__checkTime()
                 # kodiutils.log("[mediasetservice] transitionCheck: guid={}, position={}, duration={}, offset={}".format(self._guid,self._position,self._duration,self._offset), 4)
                 self.__trySeek()
     except Exception as ex:
         kodiutils.log(kodiutils.createError(ex), 1)
Exemple #8
0
 def elenco_sezioni_list(self, brandId, sort='mediasetprogram$order|asc'):
     kodiutils.log("[main] elenco_sezioni_list: brandId={},sort={}".format(
         str(brandId), str(sort)))
     els, _ = self.med.OttieniSezioniProgramma(brandId, sort=sort)
     if len(els) == 2:
         self.elenco_video_list(els[1]['mediasetprogram$subBrandId'])
     else:
         els.pop(0)
         self.__analizza_elenco(els)
     kodiutils.endScript()
 def onNotification(self, sender, method, data):
     if sender != kodiutils.ID:
         return
     kodiutils.log("[mediasetservice] onNotification {}, {}".format(
         sender, method))
     if method and data:
         action = method.split('.')[-1]
         data = json.loads(data)
         data['action'] = action
         self.action(data)
 def _dispatch(self, data):
     try:
         # kodiutils.log("[mediasetservice] Dispatch: %s" % data)
         actionName = data['action']
         if actionName in self._actionMap:
             method_name = self._actionMap[actionName]
             if hasattr(self, method_name):
                 method = getattr(self, method_name)
                 method(**data)
     except Exception as ex:
         kodiutils.log(kodiutils.createError(ex), 1)
Exemple #11
0
 def riproduci_guid(self, guid='', offset=None):
     kodiutils.log('riproduci_guid: guid={}, offset={}'.format(
         guid, offset))
     res = self.med.OttieniInfoDaGuid(guid)
     if not res or 'media' not in res:
         kodiutils.showOkDialog(kodiutils.LANGUAGE(32132),
                                kodiutils.LANGUAGE(32136))
         kodiutils.setResolvedUrl(solved=False)
         return
     self.riproduci_video(guid=guid,
                          pid=res['media'][0]['pid'],
                          offset=offset)
 def scrobble(self, **data):
     guid = data['guid'] if 'guid' in data else ''
     position = data['position'] if 'position' in data else 0
     duration = data['duration'] if 'duration' in data else 0
     action = data['action'] if 'action' in data else ''
     kodiutils.log(
         "[mediasetservice] scrobble: action={}, guid={}, position={}, duration={}"
         .format(action, guid, position, duration))
     if position and guid and duration:
         user = kodiutils.getSetting('email')
         password = kodiutils.getSetting('password')
         if user and password and self.med.login(user, password):
             self.med.setProgress(guid, position, duration)
 def __trySeek(self):
     if self._offset:
         offset = float(self._offset)
         if offset and offset > self._position:
             try:
                 self.seekTime(offset)
             except Exception as ex:
                 kodiutils.log(kodiutils.createError(ex), 1)
             position, _ = self.__getTime()
             if position < offset:
                 data = {'action': 'offset'}
                 self.action(data)
             else:
                 self._offset = ''
 def check(self, **data):
     guid = data['guid'] if 'guid' in data else None
     url = data['url'] if 'url' in data else None
     path = data['path'] if 'path' in data else None
     offset = data['offset'] if 'offset' in data else None
     kodiutils.log(
         "[mediasetservice] check: action={}, guid={}, offset={}, url={}, path={}"
         .format(data['action'], guid, offset, url, path))
     if guid and url and path:
         self.player._clear(guid=guid,
                            filename_url=url,
                            filename_path=path,
                            offset=offset,
                            playing=True)
     self.player.transitionCheck()
Exemple #15
0
    def riproduci_video(self, pid, live=False):
        from inputstreamhelper import Helper  # pylint: disable=import-error
        kodiutils.log("Trying to get the video from pid" + pid)
        data = self.med.OttieniDatiVideo(pid, live)
        if data['type'] == 'video/mp4':
            kodiutils.setResolvedUrl(data['url'])
            return
        is_helper = Helper('mpd',
                           'com.widevine.alpha' if data['security'] else None)
        if not is_helper.check_inputstream():
            kodiutils.showOkDialog(kodiutils.LANGUAGE(32132),
                                   kodiutils.LANGUAGE(32133))
            kodiutils.setResolvedUrl(solved=False)
            return
        headers = '&User-Agent={useragent}'.format(useragent=self.ua)
        props = {'manifest_type': 'mpd', 'stream_headers': headers}
        if data['security']:
            user = kodiutils.getSetting('email')
            password = kodiutils.getSetting('password')
            if user == '' or password == '':
                kodiutils.showOkDialog(kodiutils.LANGUAGE(32132),
                                       kodiutils.LANGUAGE(32134))
                kodiutils.setResolvedUrl(solved=False)
                return
            if not self.med.login(user, password):
                kodiutils.showOkDialog(kodiutils.LANGUAGE(32132),
                                       kodiutils.LANGUAGE(32135))
                kodiutils.setResolvedUrl(solved=False)
                return
            headers += '&Accept=*/*&Content-Type='
            props['license_type'] = 'com.widevine.alpha'
            props['stream_headers'] = headers
            url = self.med.OttieniWidevineAuthUrl(data['pid'])
            props['license_key'] = '{url}|{headers}|R{{SSM}}|'.format(
                url=url, headers=headers)

        headers = {
            'user-agent': self.ua,
            't-apigw': self.med.apigw,
            't-cts': self.med.cts
        }
        kodiutils.setResolvedUrl(data['url'],
                                 headers=headers,
                                 ins=is_helper.inputstream_addon,
                                 insdata=props)
Exemple #16
0
 def elenco_video_list(self,
                       sub_brand_id,
                       mode='programma',
                       sort='',
                       page=0,
                       size=0):
     kodiutils.log(
         "[main] elenco_video_list: sub_brand_id={},mode={},sort={},page={},size={}"
         .format(str(sub_brand_id), str(mode), str(sort), str(page),
                 str(size)))
     # sort = 'mediasetprogram$publishInfo_lastPublished|{}'.format(order)
     page = int(page)
     size = int(size)
     update_listing = (page > 0)
     page = page if page else 1
     if not size:
         size = self.iperpage
     els, hasMore = self.med.OttieniVideoSezione(sub_brand_id,
                                                 sort=sort,
                                                 page=page,
                                                 size=size)
     if hasMore:
         kodiutils.addListItem(kodiutils.LANGUAGE(32130), {
             'mode': mode,
             'sub_brand_id': sub_brand_id,
             'sort': sort,
             'page': page + 1,
             'size': size
         },
                               properties={'SpecialSort': 'top'},
                               arts=self.__getForwardArt())
     if page > 1:
         kodiutils.addListItem(kodiutils.LANGUAGE(32129), {
             'mode': mode,
             'sub_brand_id': sub_brand_id,
             'sort': sort,
             'page': page - 1,
             'size': size
         },
                               properties={'SpecialSort': 'top'},
                               arts=self.__getBackwardArt())
     self.__analizza_elenco(els, True)
     kodiutils.endScript(update_listing=update_listing)
Exemple #17
0
 def guida_tv_root(self):
     kodiutils.setContent('videos')
     els, _ = self.med.OttieniCanaliLive(sort='ShortTitle')
     for prog in els:
         kodiutils.log(('prog: {}').format(str(prog)), 4)
         infos = _gather_info(prog)
         arts = _gather_art(prog)
         if 'tuningInstruction' in prog:
             if prog['tuningInstruction'] and not prog[
                     'mediasetstation$eventBased']:
                 kodiutils.addListItem(
                     prog["title"], {
                         'mode': 'guida_tv',
                         'id': prog['callSign'],
                         'week': staticutils.get_timestamp_midnight()
                     },
                     videoInfo=infos,
                     arts=arts)
     kodiutils.endScript()
Exemple #18
0
 def elenco_sezione(self,
                    id,
                    page=0,
                    sort='mediasetprogram$seasonTitle',
                    order='asc',
                    size=20):
     kodiutils.log(
         "[main] elenco_sezione: id={},page={},sort={},order={}".format(
             str(id), str(page), str(sort), str(order)))
     els, hasmore = self.med.OttieniProgrammiGenere(id, size, page, sort,
                                                    order)
     kodiutils.log(
         'elenco_sezione size={},hasmore={}: {}'.format(
             str(size), str(hasmore), str(els)), 4)
     update_listing = int(page) > 0 if page else False
     page = int(page) if page else 1
     if els:
         if hasmore:
             kodiutils.addListItem(kodiutils.LANGUAGE(32130), {
                 'mode': 'sezione',
                 'id': id,
                 'page': page + 1
             },
                                   properties={'SpecialSort': 'top'},
                                   arts=self.__getForwardArt())
         if page > 1:
             kodiutils.addListItem(kodiutils.LANGUAGE(32129), {
                 'mode': 'sezione',
                 'id': id,
                 'page': page - 1
             },
                                   properties={'SpecialSort': 'top'},
                                   arts=self.__getBackwardArt())
         self.__analizza_elenco(els, True)
         # else:
         #     kodiutils.addListItem('Ordina {}'.format('DESC' if sort and order == 'asc' else 'ASC'), {
         #         'mode': 'sezione', 'id': id,
         #         'sort': sort if sort else 'title',
         #         'order': 'desc' if sort and order == 'asc' else 'asc'})
     kodiutils.endScript(update_listing=update_listing)
Exemple #19
0
 def elenco_cult(self, feedurl, page_action=""):
     els, nextPage, prevPage = self.med.OttieniCult(feedurl, self.iperpage)
     update_listing = (page_action == 'next' or page_action == 'prev')
     kodiutils.log(('elenco_cult: {}').format(str(update_listing)), 4)
     if nextPage:
         kodiutils.addListItem(kodiutils.LANGUAGE(32130), {
             'mode': 'cult',
             'feedurl': nextPage,
             'page_action': 'next'
         },
                               properties={'SpecialSort': 'top'},
                               arts=self.__getForwardArt())
     if prevPage:
         kodiutils.addListItem(kodiutils.LANGUAGE(32129), {
             'mode': 'cult',
             'feedurl': prevPage,
             'page_action': 'prev'
         },
                               properties={'SpecialSort': 'top'},
                               arts=self.__getBackwardArt())
     self.__analizza_elenco(els, True)
     kodiutils.endScript(update_listing=update_listing)
Exemple #20
0
 def elenco_ondemand(self, id, template=None, sort='', order='asc'):
     kodiutils.log(
         ('elenco_ondemand: id={},template={},sort={},order={}').format(
             str(id), str(template), str(sort), str(order)), 4)
     arts = self.__getDirectoryArt()
     for sec in self.med.OttieniOnDemandGeneri(id, sort, order):
         if template and (('template' in sec and
                           not str(sec['template']) in template.split('|'))
                          or not 'template' in sec):
             continue
         if "uxReference" in sec:
             kodiutils.log(
                 ('elenco_ondemand uxReference: {}').format(str(sec)), 4)
             kodiutils.addListItem(sec["title"], {
                 'mode': 'sezione',
                 'id': sec['uxReference']
             },
                                   arts=arts)
         elif "newsFeedUrl" in sec:
             kodiutils.log(
                 ('elenco_ondemand newsFeedUrl: {}').format(str(sec)), 4)
             kodiutils.addListItem(sec["title"], {
                 'mode': 'magazine',
                 'newsFeedUrl': sec['newsFeedUrl']
             },
                                   arts=arts)
         elif "feedurl" in sec:
             kodiutils.log(('elenco_ondemand feedurl: {}').format(str(sec)),
                           4)
             kodiutils.addListItem(sec["title"], {
                 'mode': 'cult',
                 'feedurl': sec['feedurl']
             },
                                   arts=arts)
     # kodiutils.addListItem('Ordina {}'.format('DESC' if sort and order == 'asc' else 'ASC'), {
     #     'mode': 'ondemand',
     #     'id': id,
     #     'sort': sort if sort else 'title',
     #     'order': 'desc' if sort and order == 'asc' else 'asc'
     #     })
     kodiutils.endScript(closedir=True)
Exemple #21
0
 def elenco_stagioni_list(self, series_id, title, sort=None, order='asc'):
     title = kodiutils.py2_encode(title)
     kodiutils.log(
         "[main] elenco_stagioni_list: series_id={},title={},sort={},order={}"
         .format(series_id, title, sort, order))
     els, _ = self.med.OttieniStagioni(series_id, sort, order)
     if len(els) == 1:
         self.elenco_sezioni_list(els[0]['mediasettvseason$brandId'])
     else:
         # workaround per controllare se è già una stagione e non una serie
         brandId = -1
         for el in els:
             kodiutils.log(('el: {}').format(str(el)), 4)
             if kodiutils.py2_encode(el['title']) == title:
                 brandId = el['mediasettvseason$brandId']
                 break
         kodiutils.log(('brandId: {}').format(str(brandId)), 4)
         if brandId == -1:
             self.__analizza_elenco(els)
             kodiutils.endScript()
         else:
             if sort:
                 kodiutils.addListItem('Tutte le Stagioni', {
                     'mode': 'programma',
                     'series_id': series_id,
                     'title': '*',
                     'sort': sort,
                     'order': order
                 },
                                       properties={'SpecialSort': 'top'},
                                       arts=self.__getDirectoryArt())
             else:
                 kodiutils.addListItem('Tutte le Stagioni', {
                     'mode': 'programma',
                     'series_id': series_id,
                     'title': '*'
                 },
                                       properties={'SpecialSort': 'top'},
                                       arts=self.__getDirectoryArt())
             self.elenco_sezioni_list(brandId)
Exemple #22
0
 def main(self):
     # parameter values
     params = staticutils.getParams()
     kodiutils.log("[main] params: {}".format(str(params)))
     if 'mode' in params:
         page = None
         if 'page' in params:
             try:
                 page = int(params['page'])
             except ValueError:
                 pass
         self.iperpage = min(kodiutils.getSettingAsNum('itemsperpage'), 10)
         if params['mode'] == "cerca":
             if 'type' in params:
                 if 'search' in params:
                     self.elenco_cerca_sezione(params['type'],
                                               params['search'], page)
                 else:
                     self.apri_ricerca(params['type'])
             else:
                 self.elenco_cerca_root()
         if params['mode'] == "sezione":
             self.elenco_sezione(
                 **self.sliceParams(params, ('id', 'page', 'sort',
                                             'order')))
         if params['mode'] == "ondemand":
             if 'id' in params:
                 self.elenco_ondemand(
                     **self.sliceParams(params, ('id', 'template', 'sort',
                                                 'order')))
             else:
                 self.elenco_ondemand_root()
         if params['mode'] == "cult":
             if 'feedurl' in params:
                 self.elenco_cult(
                     **self.sliceParams(params, ('feedurl', 'page_action')))
             else:
                 self.elenco_cult_root()
         if params['mode'] == "magazine":
             if 'newsFeedUrl' in params:
                 self.elenco_magazine(
                     **self.sliceParams(params, ('newsFeedUrl',
                                                 'page_action')))
             elif 'ddg_url' in params:
                 self.elenco_news(params['ddg_url'])
         if params['mode'] == "programma":
             if 'series_id' in params:
                 self.elenco_stagioni_list(
                     **self.sliceParams(params, ('series_id', 'title',
                                                 'sort', 'order')))
             elif 'sub_brand_id' in params:
                 self.elenco_video_list(
                     **self.sliceParams(params, ('sub_brand_id', 'mode',
                                                 'sort', 'page', 'size')))
             elif 'brand_id' in params:
                 self.elenco_sezioni_list(params['brand_id'])
         if params['mode'] == "video":
             if 'pid' in params:
                 self.riproduci_video(
                     **self.sliceParams(params, ('guid', 'pid', 'offset')))
             else:
                 self.riproduci_guid(
                     **self.sliceParams(params, ('guid', 'offset')))
         if params['mode'] == "live":
             if 'id' in params:
                 self.riproduci_video(pid=params['id'], live=True)
             else:
                 self.canali_live_play(params['guid'])
         if params['mode'] == "tv":
             self.tv_root()
         if params['mode'] == "personal":
             self.personal_root()
         elif params['mode'] == "continuewatch":
             self.continuewatch()
         elif params['mode'] == "favorites":
             self.favorites()
         elif params['mode'] == "watchlist":
             self.watchlist()
         elif params['mode'] == "contextmenu":
             self.contextMenu(
                 **self.sliceParams(params, ('context_menu',
                                             'context_action', 'context_id',
                                             'context_ui')))
         elif params['mode'] == "canali_live":
             self.canali_live_root()
         elif params['mode'] == "guida_tv":
             if 'id' in params:
                 if 'week' in params:
                     self.guida_tv_canale_settimana(params['id'],
                                                    int(params['week']))
                 elif 'day' in params:
                     self.guida_tv_canale_giorno(params['id'],
                                                 int(params['day']))
             self.guida_tv_root()
     else:
         self.root()
# -*- coding: utf-8 -*-

from resources.lib.monitor import MediasetService
from phate89lib import kodiutils  # pyright: reportMissingImports=false

scrobbling = kodiutils.getSettingAsNum("scrobbling")

if scrobbling:
    kodiutils.log(
        'Addon {} starting {} scrobbling service (version {})'.format(
            kodiutils.ID, kodiutils.NAME, kodiutils.VERSION))
    try:
        MediasetService().run()
    except Exception as exc:
        kodiutils.log('[mediasetservice] Exception: {}'.format(str(exc)))

    kodiutils.log(
        'Addon {} shutting down {} scrobbling service (version {})'.format(
            kodiutils.ID, kodiutils.NAME, kodiutils.VERSION))
Exemple #24
0
 def __analizza_elenco(self,
                       progs,
                       setcontent=False,
                       titlewd=False,
                       isDeletable=False,
                       delete_list='',
                       context_ui=''):
     if not progs:
         return
     if setcontent:
         self.__imposta_tipo_media(progs[0])
     defaultArt = self.__getDirectoryArt()
     for prog in progs:
         infos = _gather_info(prog,
                              titlewd=titlewd,
                              lookup_fullplot=self.lookup_fullplot)
         arts = _gather_art(prog) or defaultArt
         kodiutils.log('__analizza_elenco infos: {}'.format(infos))
         kodiutils.log('__analizza_elenco arts: {}'.format(arts))
         item_id = ''
         guid = ''
         args = {}
         properties = {}
         if 'media' in prog:
             kodiutils.log('__analizza_elenco media: {}'.format(str(prog)),
                           4)
             args['mode'] = 'video'
             # salta se non ha un media ma ha il tag perchè non riproducibile
             if prog['media']:
                 media = prog['media'][0]
                 if 'position' in prog:
                     args['offset'] = prog['position']
                 if 'pid' in media:
                     args['pid'] = media['pid']
                 elif 'publicUrl' in media:
                     args['pid'] = media['publicUrl'].split('/')[-1]
                 if 'guid' in media:
                     args['guid'] = media['guid']
                     guid = media['guid']
                 if 'mediasetprogram$duration' in prog:
                     properties['TotalTime'] = str(
                         prog['mediasetprogram$duration'])
                 if 'mediasetprogram$brandId' in prog:
                     item_id = prog['mediasetprogram$brandId']
                 properties['ResumeTime'] = '0.0'
                 menuItems = self.menuItems(isDeletable=isDeletable,
                                            delete_list=delete_list,
                                            item_id=item_id,
                                            guid=guid,
                                            context_ui=context_ui)
                 kodiutils.addListItem(infos["title"],
                                       args,
                                       videoInfo=infos,
                                       arts=arts,
                                       isFolder=False,
                                       properties=properties,
                                       menuItems=menuItems)
         elif 'tuningInstruction' in prog:
             kodiutils.log(
                 '__analizza_elenco tuningInstruction: {}'.format(
                     str(prog)), 4)
             args['mode'] = 'live'
             if prog['tuningInstruction'] and not prog[
                     'mediasetstation$eventBased']:
                 vdata = prog['tuningInstruction'][
                     'urn:theplatform:tv:location:any']
                 for v in vdata:
                     if v['format'] == 'application/x-mpegURL':
                         args['id'] = v['releasePids'][0]
                     else:
                         args['mid'] = v['releasePids'][0]
                 kodiutils.addListItem(prog["title"],
                                       args,
                                       videoInfo=infos,
                                       arts=arts,
                                       isFolder=False)
         elif 'mediasetprogram$subBrandId' in prog:
             kodiutils.log(
                 '__analizza_elenco subBrandId: {}'.format(str(prog)), 4)
             item_id = prog['mediasetprogram$brandId'] if prog[
                 'mediasetprogram$brandId'] else ''
             args['mode'] = 'programma'
             args['sub_brand_id'] = prog['mediasetprogram$subBrandId']
             menuItems = self.menuItems(isDeletable=isDeletable,
                                        delete_list=delete_list,
                                        item_id=item_id,
                                        guid=guid,
                                        context_ui=context_ui)
             kodiutils.addListItem(infos["title"],
                                   args,
                                   videoInfo=infos,
                                   arts=arts,
                                   menuItems=menuItems)
         elif 'mediasettvseason$brandId' in prog:
             kodiutils.log(
                 '__analizza_elenco brandId: {}'.format(str(prog)), 4)
             # title = prog['title']
             # if 'mediasettvseason$displaySeason' in prog and  'mediasetprogram$seasonTitle' in prog:
             item_id = prog['mediasettvseason$brandId'] if prog[
                 'mediasettvseason$brandId'] else ''
             args['mode'] = 'programma'
             args['brand_id'] = prog['mediasettvseason$brandId']
             menuItems = self.menuItems(isDeletable=isDeletable,
                                        delete_list=delete_list,
                                        item_id=item_id,
                                        guid=guid,
                                        context_ui=context_ui)
             kodiutils.addListItem(prog["title"],
                                   args,
                                   videoInfo=infos,
                                   arts=arts,
                                   menuItems=menuItems)
         elif 'seriesId' in prog:
             kodiutils.log(
                 '__analizza_elenco seriesId: {}'.format(str(prog)), 4)
             title = prog['title']
             seriesTitle = prog['title']
             sort = 'tvSeasonNumber'
             order = 'asc'
             item_id = prog['mediasetprogram$brandId'] if prog[
                 'mediasetprogram$brandId'] else ''
             if 'mediasetprogram$pageUrl' in prog and 'programmi-tv' in str(
                     prog['mediasetprogram$pageUrl'].encode(
                         'utf-8')).lower():
                 if 'mediasetprogram$seasonTitle' in prog and 'mediasetprogram$displaySeason' in prog:
                     seasonTitle = str(
                         prog['mediasetprogram$seasonTitle'].encode(
                             'utf-8'))
                     # displaySeason = str(prog['mediasetprogram$displaySeason'].encode('utf-8'))
                     seriesTitle = seasonTitle
                     title = seriesTitle
             args['mode'] = 'programma'
             args['series_id'] = prog['seriesId']
             args['sort'] = sort
             args['order'] = order
             args['title'] = seriesTitle
             menuItems = self.menuItems(isDeletable=isDeletable,
                                        delete_list=delete_list,
                                        item_id=item_id,
                                        guid=guid,
                                        context_ui=context_ui)
             kodiutils.addListItem(title,
                                   args,
                                   videoInfo=infos,
                                   arts=arts,
                                   menuItems=menuItems)
         else:
             kodiutils.log('__analizza_elenco other: {}'.format(str(prog)),
                           4)
             item_id = prog['mediasetprogram$brandId'] if prog[
                 'mediasetprogram$brandId'] else ''
             args['mode'] = 'programma'
             args['brand_id'] = prog['mediasetprogram$brandId']
             menuItems = self.menuItems(isDeletable=isDeletable,
                                        delete_list=delete_list,
                                        item_id=item_id,
                                        guid=guid,
                                        context_ui=context_ui)
             kodiutils.addListItem(prog["title"],
                                   args,
                                   videoInfo=infos,
                                   arts=arts,
                                   menuItems=menuItems)
Exemple #25
0
 def canali_live_root(self):
     kodiutils.setContent('videos')
     now = staticutils.get_timestamp()
     els, _ = self.med.OttieniProgrammiLive()  # (sort='title')
     chans = {}
     for chan in els:
         if 'listings' in chan and chan['listings']:
             for prog in chan['listings']:
                 if prog['startTime'] <= now <= prog['endTime']:
                     guid = chan['guid']
                     title = '{} - {}'.format(
                         chan['title'],
                         kodiutils.py2_encode(
                             prog["mediasetlisting$epgTitle"]))
                     chans[guid] = {
                         'title':
                         title,
                         'infos':
                         _gather_info(prog, infos={'title': title}),
                         'arts':
                         _gather_art(prog),
                         'restartAllowed':
                         prog['mediasetlisting$restartAllowed']
                     }
     kodiutils.log(('chans: {}').format(str(chans)))
     els, _ = self.med.OttieniCanaliLive(sort='shortTitle|asc')
     for prog in els:
         if ('callSign' in prog and prog['callSign'] in chans
                 and 'tuningInstruction' in prog
                 and prog['tuningInstruction']):
             chn = chans[prog['callSign']]
             if not chn['arts']:
                 chn['arts'] = _gather_art(prog)
             if chn['restartAllowed']:
                 if kodiutils.getSettingAsBool('splitlive'):
                     kodiutils.addListItem(chn['title'], {
                         'mode': 'live',
                         'guid': prog['callSign']
                     },
                                           videoInfo=chn['infos'],
                                           arts=chn['arts'])
                     continue
                 vid = self.__ottieni_vid_restart(prog['callSign'])
                 if vid:
                     kodiutils.addListItem(chn['title'], {
                         'mode': 'video',
                         'pid': vid
                     },
                                           videoInfo=chn['infos'],
                                           arts=chn['arts'],
                                           properties={'ResumeTime': '0.0'},
                                           isFolder=False)
                     continue
             data = {'mode': 'live'}
             vdata = prog['tuningInstruction'][
                 'urn:theplatform:tv:location:any']
             for v in vdata:
                 if v['format'] == 'application/x-mpegURL':
                     data['id'] = v['releasePids'][0]
                 else:
                     data['mid'] = v['releasePids'][0]
             kodiutils.addListItem(prog['title'],
                                   data,
                                   videoInfo=chn['infos'],
                                   arts=chn['arts'],
                                   isFolder=False)
     kodiutils.endScript()
Exemple #26
0
    def riproduci_video(self, guid=None, pid=None, live=False, offset=None):
        from inputstreamhelper import Helper  # pylint: disable=import-error
        # kodiutils.log("Trying to get the video from pid %s" % pid)
        kodiutils.log(
            'riproduci_video: guid={}, pid={}, live={}, offset={}'.format(
                guid, pid, live, offset))
        data = self.med.OttieniDatiVideo(pid, live)
        kodiutils.log('riproduci_video: data={}'.format(str(data)))
        if data['type'] == 'video/mp4':
            kodiutils.setResolvedUrl(data['url'])
            return
        is_helper = Helper('mpd',
                           'com.widevine.alpha' if data['security'] else None)
        if not is_helper.check_inputstream():
            kodiutils.showOkDialog(kodiutils.LANGUAGE(32132),
                                   kodiutils.LANGUAGE(32133))
            kodiutils.setResolvedUrl(solved=False)
            return
        headers = '&User-Agent={useragent}'.format(useragent=self.ua)
        props = {'manifest_type': 'mpd', 'stream_headers': headers}
        properties = {'ResumeTime': '0.0'}
        isAutenticated = False
        scrobbling = kodiutils.getSettingAsNum('scrobbling')
        if scrobbling and not self.isAnonimous:
            properties['guid'] = guid
            if scrobbling == self.ADDON_SCROBBLING_CUSTOM:
                if offset:
                    properties['offset'] = str(offset)
                else:
                    user = kodiutils.getSetting('email')
                    password = kodiutils.getSetting('password')
                    isAutenticated = self.med.login(user, password)
                    if isAutenticated:
                        offset = self.med.getProgress(guid)
                        if offset:
                            properties['offset'] = str(offset)

        if data['security']:
            if not isAutenticated:
                user = kodiutils.getSetting('email')
                password = kodiutils.getSetting('password')
                if user == '' or password == '':
                    kodiutils.showOkDialog(kodiutils.LANGUAGE(32132),
                                           kodiutils.LANGUAGE(32134))
                    kodiutils.setResolvedUrl(solved=False)
                    return
                if not self.med.login(user, password):
                    kodiutils.showOkDialog(kodiutils.LANGUAGE(32132),
                                           kodiutils.LANGUAGE(32135))
                    kodiutils.setResolvedUrl(solved=False)
                    return
            headers += '&Accept=*/*&Content-Type='
            props['license_type'] = 'com.widevine.alpha'
            props['stream_headers'] = headers
            url = self.med.OttieniWidevineAuthUrl(data['pid'])
            props['license_key'] = '{url}|{headers}|R{{SSM}}|'.format(
                url=url, headers=headers)

        headers = {
            'user-agent': self.ua,
            't-apigw': self.med.apigw,
            't-cts': self.med.cts
        }
        kodiutils.log("riproduci_video properties: %s" % properties)
        kodiutils.setResolvedUrl(data['url'],
                                 headers=headers,
                                 ins=is_helper.inputstream_addon,
                                 insdata=props,
                                 properties=properties)
Exemple #27
0
 def __imposta_tipo_media(self, prog):
     kodiutils.log('__analizza_elenco mediatype: {}'.format(
         _gather_media_type(prog)))
     if self.detect_media_type:
         kodiutils.setContent(_gather_media_type(prog) + 's')
 def __init__(self, *args, **kwargs):
     kodiutils.log("[mediasetservice] monitor initialiazed")
     self.action = kwargs['action']
 def __init__(self, *args, **kwargs):
     self.action = kwargs['action']
     self._scrobbling = kodiutils.getSettingAsNum("scrobbling")
     self._clear()
     kodiutils.log("[mediasetservice] player initialiazed")