From 7f83ae871c2e3873117cf8e5ed2d917d7c6e4e4d Mon Sep 17 00:00:00 2001 From: rysson Date: Sat, 20 Nov 2021 22:19:15 +0100 Subject: [PATCH 1/6] PlayerMB: [1.10.1] forsowanie seriali i duplikaty. Fixes #673. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - forsowanie seriali nawet gdy nie są w liście dozwolonych - usuwanie duplikatów Fixes #673. --- srcs/plugin.video.playermb/addon.xml | 7 +++- srcs/plugin.video.playermb/main.py | 40 ++++++++++++------- .../resources/settings.xml | 2 + 3 files changed, 33 insertions(+), 16 deletions(-) diff --git a/srcs/plugin.video.playermb/addon.xml b/srcs/plugin.video.playermb/addon.xml index b48f9a8..dd7548c 100644 --- a/srcs/plugin.video.playermb/addon.xml +++ b/srcs/plugin.video.playermb/addon.xml @@ -1,5 +1,5 @@ - + @@ -25,7 +25,10 @@ resources/screenshot-01.jpg resources/screenshot-02.jpg - 1.10 + 1.10.1 +- forsowanie seriali nawet gdy nie są w liście dozwolonych +- usuwanie duplikatów +1.10 - szybsze połączenia i obsługa błędów SSL - obrazki - time shift w TV diff --git a/srcs/plugin.video.playermb/main.py b/srcs/plugin.video.playermb/main.py index 934aed1..a9c89c1 100644 --- a/srcs/plugin.video.playermb/main.py +++ b/srcs/plugin.video.playermb/main.py @@ -72,8 +72,8 @@ def load_ints(path): # from resources.lib.tools import U, uclean, NN, fragdict -MetaDane = namedtuple('MetaDane', 'tytul opis foto sezon epizod fanart thumb landscape poster') -MetaDane.__new__.__defaults__ = 4*(None,) +MetaDane = namedtuple('MetaDane', 'tytul opis foto sezon epizod fanart thumb landscape poster allowed') +MetaDane.__new__.__defaults__ = 5*(None,) MetaDane.art = property(lambda self: {k: v for k in 'fanart thumb landscape poster'.split() for v in (getattr(self, k),) if v}) @@ -511,11 +511,14 @@ def __init__(self): self.MYLIST_CACHE_TIMEOUT = 3 * 3600 # cache valid time for mylist: 3h self.skip_unaviable = get_bool('avaliable_only') + self.fix_api = get_bool('fix_api') + self.remove_duplicates = get_bool('remove_duplicates') self.partial_size = int(addon.getSetting('partial_size') or 1000) # self.force_media_fanart = get_bool('self.force_media_fanart') self.force_media_fanart = True self.force_media_fanart_width = 1280 self.force_media_fanart_quality = 85 + self._precessed_vid_list = set() def params(self, maxResults=False, **kwargs): """ @@ -587,7 +590,11 @@ def getMetaDane(self, data): images['fanart'] = '%s?%s' % (iurl, urlencode(iparams)) sezon = bool(data.get('showSeasonNumber')) or data.get('type') == 'SERIAL' epizod = bool(data.get("showEpisodeNumber")) - return MetaDane(tytul, opis, sezon=sezon, epizod=epizod, **images) + if self.fix_api: + allowed = data['id'] in self.mylist or data.get("ncPlus") is False + else: + allowed = data['id'] in self.mylist + return MetaDane(tytul, opis, sezon=sezon, epizod=epizod, allowed=allowed, **images) def createDatas(self): @@ -941,14 +948,19 @@ def add_media_item(self, mud, vid, meta, suffix=None, folder=False, isPlayable=N if `isPlayable` is None (default) it's forced to `not folder`, because folder is not playable. """ - if vid in self.mylist or not self.skip_unaviable: - no_acccess = not (mud or '').strip() - if no_acccess: + if vid in self._precessed_vid_list: + xbmc.log('PLAYER.PL: item %s (%r) already processed' % (vid, meta.tytul), xbmc.LOGWARNING) + if self.remove_duplicates: + return + allowed = vid in self.mylist or (meta and meta.allowed is True) + if allowed or not self.skip_unaviable: + no_playable = not (mud or '').strip() or meta.sezon + if no_playable: isPlayable = False folder = True elif isPlayable is None: isPlayable = not folder - if suffix is None and no_acccess: + if suffix is None and no_playable and not allowed: # auto suffix for non-playable video suffix = ' - [COLOR khaki]([I]brak w pakiecie[/I])[/COLOR]' suffix = suffix or '' @@ -962,6 +974,7 @@ def add_media_item(self, mud, vid, meta, suffix=None, folder=False, isPlayable=N } add_item(str(vid), PLchar(meta.tytul) + suffix, meta.foto or ADDON_ICON, mud, folder=folder, isPlayable=isPlayable, infoLabels=info, art=meta.art) + self._precessed_vid_list.add(vid) def process_vod_list(self, vod_list, subitem=None): """ @@ -974,7 +987,7 @@ def process_vod_list(self, vod_list, subitem=None): vid = vod['id'] meta = self.getMetaDane(vod) mud, fold = ' ', None - if vid in self.mylist or vod.get("payable") or vod.get("ncPlus"): + if vid in self.mylist or vod.get("payable") or vod.get("ncPlus") or meta.allowed is True: if vod['type'] == 'SERIAL': mud = 'listcategSerial' fold = True @@ -1217,14 +1230,13 @@ def listCateg(self, idslug): elif mode == "listcateg": PLAYERPL().listCateg(exlink) - - elif mode == "listcategContent" : + elif mode == "listcategContent": PLAYERPL().listCategContent(exlink) - elif mode == "listcategSerial" : - PLAYERPL().listCategSerial (exlink) - elif mode == "listEpizody" : - PLAYERPL().listEpizody (exlink) + elif mode == "listcategSerial": + PLAYERPL().listCategSerial(exlink) + elif mode == "listEpizody": + PLAYERPL().listEpizody(exlink) elif mode == 'search.it': query = exlink diff --git a/srcs/plugin.video.playermb/resources/settings.xml b/srcs/plugin.video.playermb/resources/settings.xml index 3ff55a1..314bc01 100644 --- a/srcs/plugin.video.playermb/resources/settings.xml +++ b/srcs/plugin.video.playermb/resources/settings.xml @@ -14,6 +14,8 @@ + + From 2a5828859d1584ba0d5bfa2506e0646a8b148df3 Mon Sep 17 00:00:00 2001 From: rysson Date: Fri, 26 Nov 2021 22:39:58 +0100 Subject: [PATCH 2/6] PlayerMB: [1.10.2] p(l)ayable fix i drobiazgi. Fixes #673. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Naprawa dostępu, teraz można oglądać gdy - video jest free (nie ma ani `payable` ani `ncPlus`) - jak płatne to musi być w `mylist` Dodane tytuły epizodów. Dodane zapowiedzi (data od kiedy będzie można oglądać). --- srcs/plugin.video.playermb/addon.xml | 2 +- srcs/plugin.video.playermb/main.py | 83 ++++++++++++++-------------- 2 files changed, 43 insertions(+), 42 deletions(-) diff --git a/srcs/plugin.video.playermb/addon.xml b/srcs/plugin.video.playermb/addon.xml index dd7548c..ec532a8 100644 --- a/srcs/plugin.video.playermb/addon.xml +++ b/srcs/plugin.video.playermb/addon.xml @@ -1,5 +1,5 @@ - + diff --git a/srcs/plugin.video.playermb/main.py b/srcs/plugin.video.playermb/main.py index a9c89c1..21c4b4a 100644 --- a/srcs/plugin.video.playermb/main.py +++ b/srcs/plugin.video.playermb/main.py @@ -553,7 +553,7 @@ def update_headers2(self): 'API-ProfileUid': self.SELECTED_PROFILE_ID, } - def getMetaDane(self, data): + def get_meta_data(self, data): if not data.get('active', True): return '', '', '', None, None tytul = data['title'] @@ -590,10 +590,7 @@ def getMetaDane(self, data): images['fanart'] = '%s?%s' % (iurl, urlencode(iparams)) sezon = bool(data.get('showSeasonNumber')) or data.get('type') == 'SERIAL' epizod = bool(data.get("showEpisodeNumber")) - if self.fix_api: - allowed = data['id'] in self.mylist or data.get("ncPlus") is False - else: - allowed = data['id'] in self.mylist + allowed = self.is_allowed(data) return MetaDane(tytul, opis, sezon=sezon, epizod=epizod, allowed=allowed, **images) def createDatas(self): @@ -942,7 +939,15 @@ def mylist(self): def mylist(self): self.remove_mylist() - def add_media_item(self, mud, vid, meta, suffix=None, folder=False, isPlayable=None): + def is_allowed(self, vod): + """Check if item (video, folder) is avaliable in current pay plan.""" + return ( + # not have to pay and not on ncPlus, it's means free + not (vod.get('payable') or vod.get('ncPlus')) + # or it's on myslit, it's means it is in pay plan + or vod.get('id') in self.mylist) + + def add_media_item(self, mud, vid, meta=None, suffix=None, folder=False, isPlayable=None, vod=None): """ Add default media item to xbmc.list. if `isPlayable` is None (default) it's forced to `not folder`, @@ -952,7 +957,9 @@ def add_media_item(self, mud, vid, meta, suffix=None, folder=False, isPlayable=N xbmc.log('PLAYER.PL: item %s (%r) already processed' % (vid, meta.tytul), xbmc.LOGWARNING) if self.remove_duplicates: return - allowed = vid in self.mylist or (meta and meta.allowed is True) + if meta is None and vod is not None: + meta = self.get_meta_data(vod) + allowed = (meta and meta.allowed is True) or vid in self.mylist if allowed or not self.skip_unaviable: no_playable = not (mud or '').strip() or meta.sezon if no_playable: @@ -960,9 +967,14 @@ def add_media_item(self, mud, vid, meta, suffix=None, folder=False, isPlayable=N folder = True elif isPlayable is None: isPlayable = not folder - if suffix is None and no_playable and not allowed: - # auto suffix for non-playable video - suffix = ' - [COLOR khaki]([I]brak w pakiecie[/I])[/COLOR]' + if suffix is None: + suffix = '' + if no_playable and not allowed: + # auto suffix for non-playable video + suffix += ' - [COLOR khaki]([I]brak w pakiecie[/I])[/COLOR]' + sched = vod and vod.get('displaySchedules') + if sched and sched[0].get('type') == 'SOON': + suffix += ' [COLOR gray] [LIGHT] (od %s)[/LIGHT][/COLOR]' % sched[0]['till'][:-3] suffix = suffix or '' descr = PLchar(meta.opis or meta.tytul) + '\n' + suffix info = { @@ -985,16 +997,16 @@ def process_vod_list(self, vod_list, subitem=None): if subitem: vod = vod[subitem] vid = vod['id'] - meta = self.getMetaDane(vod) + meta = self.get_meta_data(vod) mud, fold = ' ', None - if vid in self.mylist or vod.get("payable") or vod.get("ncPlus") or meta.allowed is True: + if meta.allowed is True: if vod['type'] == 'SERIAL': mud = 'listcategSerial' fold = True else: mud = 'playvid' fold = False - self.add_media_item(mud, vid, meta, folder=fold) + self.add_media_item(mud, vid, meta, folder=fold, vod=vod) def listCollection(self): self.refreshTokenTVN() @@ -1005,7 +1017,7 @@ def listCollection(self): dod = '' vid = vod['id'] slug = vod['slug'] - meta = self.getMetaDane(vod) + meta = self.get_meta_data(vod) info = { 'title': PLchar(meta.tytul) + dod, 'plot': PLchar(meta.opis or meta.tytul) + '\n' + dod @@ -1062,19 +1074,18 @@ def listEpizody(self, tytsezid): epizody = getRequests(urlk, headers=self.HEADERS2, params=self.PARAMS) for vod in epizody: vid = vod['id'] - meta = self.getMetaDane(vod) + meta = self.get_meta_data(vod) epiz = vod["episode"] sez = (vod["season"]["number"]) tyt = PLchar((vod["season"]["serial"]["title"])) if 'fakty-' in vod.get('shareUrl', ''): - tytul = '%s - %s' % (tyt, PLchar(vod['title'])) + tytul = '%s – %s' % (tyt, PLchar(vod['title'])) else: - tytul = '%s - S%02dE%02d' % (tyt, sez, epiz) - mud = ' ' - if vid in self.mylist or vod.get("payable") or vod.get("ncPlus"): - mud = 'playvid' + tytul = '%s – S%02dE%02d' % (tyt, sez, epiz) + if vod.get('title'): + tytul += ' – %s' % vod['title'].strip() meta = meta._replace(tytul=tytul) - self.add_media_item(mud, vid, meta, folder=False) + self.add_media_item('playvid', vid, meta, folder=False, vod=vod) setView('episodes') # xbmcplugin.setContent(addon_handle, 'episodes') xbmcplugin.addSortMethod(addon_handle, sortMethod=xbmcplugin.SORT_METHOD_TITLE, label2Mask = "%R, %Y, %P") @@ -1099,7 +1110,7 @@ def listCategSerial(self, id): self.refreshTokenTVN() urlk = 'https://player.pl/playerapi/product/vod/serial/%s' % id data = getRequests(urlk, headers=self.HEADERS2, params=self.PARAMS) - meta = self.getMetaDane(data) + meta = self.get_meta_data(data) typ = True if meta.sezon or meta.epizod: if not meta.sezon: @@ -1139,28 +1150,18 @@ def getTvs(self): urlk = 'https://player.pl/playerapi/product/live/list' out = [] data = getRequests(urlk, headers=self.HEADERS2, params=self.PARAMS) - mylist = self.load_mylist() - for dd in data: - id_=dd['id'] - tyt=dd['title'] + vid = dd['id'] + tyt = PLchar(dd['title']) foto = dd['images']['pc'][0]['mainUrl'] foto = 'https:' + foto if foto.startswith('//') else foto - # urlid = '%s:%s'%(id_,'kanal') # mbebe - urlid = id_ # kszaq - try: - opis = dd['lead'] - except: - opis='' - dod='' - if dd["payable"]: - if dd['id'] not in mylist: - dod=' - [I][COLOR khaki](brak w pakiecie)[/COLOR][/I]' - playk =False - mud = ' ' - # TODO: check this condiition please - if not dd["payable"] or dd['id'] in mylist or not self.skip_unaviable: - out.append({'title':PLchar(tyt)+dod,'url':urlid,'img':foto,'plot':PLchar(opis)}) + # urlid = '%s:%s'%(vid,'kanal') # mbebe + urlid = vid # kszaq + opis = dd.get('lead', '') + if not self.is_allowed(dd): + tyt += ' - [I][COLOR khaki](brak w pakiecie)[/COLOR][/I]' + if not self.skip_unaviable: + out.append({'title': tyt, 'url': urlid, 'img': foto, 'plot': PLchar(opis)}) return out def listCateg(self, idslug): From 804f9323a0edf0db69f9c83cd93459d29b2ddbdf Mon Sep 17 00:00:00 2001 From: rysson Date: Sat, 27 Nov 2021 15:17:16 +0100 Subject: [PATCH 3/6] PlayerMB: [1.10.3] fix fixa. Fixes #673. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - naprawa kanałów TV. - nazwa linku z minusem a labelka z półpauzą i tytułem (pomięta oglądane). --- srcs/plugin.video.playermb/addon.xml | 2 +- srcs/plugin.video.playermb/main.py | 45 ++++++++++++++++++---------- 2 files changed, 30 insertions(+), 17 deletions(-) diff --git a/srcs/plugin.video.playermb/addon.xml b/srcs/plugin.video.playermb/addon.xml index ec532a8..0b26452 100644 --- a/srcs/plugin.video.playermb/addon.xml +++ b/srcs/plugin.video.playermb/addon.xml @@ -1,5 +1,5 @@ - + diff --git a/srcs/plugin.video.playermb/main.py b/srcs/plugin.video.playermb/main.py index 21c4b4a..2c419c9 100644 --- a/srcs/plugin.video.playermb/main.py +++ b/srcs/plugin.video.playermb/main.py @@ -107,9 +107,9 @@ def load_ints(path): addon_data = AddonUserData(os.path.join(DATAPATH, 'data.json')) exlink = params.get('url') -name = params.get('name') -page = params.get('page', '') -rys = params.get('image') +# name = params.get('name') +# page = params.get('page', '') +# rys = params.get('image') kukz = '' @@ -224,7 +224,7 @@ def build_url(query): def add_item(url, name, image, mode, folder=False, isPlayable=False, infoLabels=None, movie=True, itemcount=1, page=1, fanart=None, moviescount=0, properties=None, thumb=None, - contextmenu=None, art=None): + contextmenu=None, art=None, linkdata=None): list_item = xbmcgui.ListItem(label=name) if isPlayable: list_item.setProperty("isPlayable", 'True') @@ -250,10 +250,16 @@ def add_item(url, name, image, mode, folder=False, isPlayable=False, infoLabels= list_item.setProperties(properties) if contextmenu: list_item.addContextMenuItems(contextmenu, replaceItems=False) + # link data used to build link,to support old one + linkdata = {} if linkdata is None else dict(linkdata) + linkdata.setdefault('name', name) + linkdata.setdefault('image', image) + linkdata.setdefault('page', page) + # add item ok = xbmcplugin.addDirectoryItem( handle=addon_handle, - url=build_url({'mode': mode, 'url': url, 'page': page, 'moviescount': moviescount, - 'movie': movie, 'name': name, 'image': image}), + url=build_url({'mode': mode, 'url': url, 'page': linkdata['page'], 'moviescount': moviescount, + 'movie': movie, 'name': linkdata['name'], 'image': linkdata['image']}), listitem=list_item, isFolder=folder) return ok @@ -519,6 +525,7 @@ def __init__(self): self.force_media_fanart_width = 1280 self.force_media_fanart_quality = 85 self._precessed_vid_list = set() + self.dywiz = '–' def params(self, maxResults=False, **kwargs): """ @@ -947,7 +954,8 @@ def is_allowed(self, vod): # or it's on myslit, it's means it is in pay plan or vod.get('id') in self.mylist) - def add_media_item(self, mud, vid, meta=None, suffix=None, folder=False, isPlayable=None, vod=None): + def add_media_item(self, mud, vid, meta=None, suffix=None, folder=False, isPlayable=None, + vod=None, linkdata=None): """ Add default media item to xbmc.list. if `isPlayable` is None (default) it's forced to `not folder`, @@ -985,7 +993,8 @@ def add_media_item(self, mud, vid, meta=None, suffix=None, folder=False, isPlaya # 'genre': 'Nawalanka', # this is shown in Arctic: Zephyr 2 - Resurrection Mod } add_item(str(vid), PLchar(meta.tytul) + suffix, meta.foto or ADDON_ICON, mud, - folder=folder, isPlayable=isPlayable, infoLabels=info, art=meta.art) + folder=folder, isPlayable=isPlayable, infoLabels=info, art=meta.art, + linkdata=linkdata) self._precessed_vid_list.add(vid) def process_vod_list(self, vod_list, subitem=None): @@ -1079,16 +1088,18 @@ def listEpizody(self, tytsezid): sez = (vod["season"]["number"]) tyt = PLchar((vod["season"]["serial"]["title"])) if 'fakty-' in vod.get('shareUrl', ''): - tytul = '%s – %s' % (tyt, PLchar(vod['title'])) + name = '%s - %s' % (tyt, PLchar(vod['title'])) + tytul = '%s %s %s' % (tyt, self.dywiz, PLchar(vod['title'])) else: - tytul = '%s – S%02dE%02d' % (tyt, sez, epiz) + name = '%s - S%02dE%02d' % (tyt, sez, epiz) + tytul = '%s %s S%02dE%02d' % (tyt, self.dywiz, sez, epiz) if vod.get('title'): - tytul += ' – %s' % vod['title'].strip() + tytul += ' %s %s' % (self.dywiz, vod['title'].strip()) meta = meta._replace(tytul=tytul) - self.add_media_item('playvid', vid, meta, folder=False, vod=vod) + self.add_media_item('playvid', vid, meta, folder=False, vod=vod, linkdata={'name': name}) setView('episodes') # xbmcplugin.setContent(addon_handle, 'episodes') - xbmcplugin.addSortMethod(addon_handle, sortMethod=xbmcplugin.SORT_METHOD_TITLE, label2Mask = "%R, %Y, %P") + xbmcplugin.addSortMethod(addon_handle, sortMethod=xbmcplugin.SORT_METHOD_TITLE, label2Mask="%R, %Y, %P") xbmcplugin.endOfDirectory(addon_handle) def getSezony(self, id, tytul, opis, foto, typ): @@ -1158,10 +1169,11 @@ def getTvs(self): # urlid = '%s:%s'%(vid,'kanal') # mbebe urlid = vid # kszaq opis = dd.get('lead', '') - if not self.is_allowed(dd): + allowed = self.is_allowed(dd) + if not allowed: tyt += ' - [I][COLOR khaki](brak w pakiecie)[/COLOR][/I]' - if not self.skip_unaviable: - out.append({'title': tyt, 'url': urlid, 'img': foto, 'plot': PLchar(opis)}) + if allowed or not self.skip_unaviable: + out.append({'title': tyt, 'url': urlid, 'img': foto, 'plot': PLchar(opis)}) return out def listCateg(self, idslug): @@ -1219,6 +1231,7 @@ def listCateg(self, idslug): if __name__ == '__main__': mode = params.get('mode', None) + name = params.get('name') xbmc.log('PLAYER.PL: ENTER: mode=%r, name=%r, exlink=%r' % (mode, name, exlink), xbmc.LOGWARNING) From 1451babcc571243e0eb52fe406a294f676f436b4 Mon Sep 17 00:00:00 2001 From: rysson Date: Sat, 27 Nov 2021 23:18:04 +0100 Subject: [PATCH 4/6] PlayerMB: [1.10.4] fix fixa. Fixes #673. - fix kodowania dla Python2 --- srcs/plugin.video.playermb/addon.xml | 2 +- srcs/plugin.video.playermb/main.py | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/srcs/plugin.video.playermb/addon.xml b/srcs/plugin.video.playermb/addon.xml index 0b26452..9271750 100644 --- a/srcs/plugin.video.playermb/addon.xml +++ b/srcs/plugin.video.playermb/addon.xml @@ -1,5 +1,5 @@ - + diff --git a/srcs/plugin.video.playermb/main.py b/srcs/plugin.video.playermb/main.py index 2c419c9..bc7db06 100644 --- a/srcs/plugin.video.playermb/main.py +++ b/srcs/plugin.video.playermb/main.py @@ -962,7 +962,7 @@ def add_media_item(self, mud, vid, meta=None, suffix=None, folder=False, isPlaya because folder is not playable. """ if vid in self._precessed_vid_list: - xbmc.log('PLAYER.PL: item %s (%r) already processed' % (vid, meta.tytul), xbmc.LOGWARNING) + xbmc.log(u'PLAYER.PL: item %s (%r) already processed' % (vid, meta.tytul), xbmc.LOGWARNING) if self.remove_duplicates: return if meta is None and vod is not None: @@ -976,14 +976,14 @@ def add_media_item(self, mud, vid, meta=None, suffix=None, folder=False, isPlaya elif isPlayable is None: isPlayable = not folder if suffix is None: - suffix = '' + suffix = u'' if no_playable and not allowed: # auto suffix for non-playable video - suffix += ' - [COLOR khaki]([I]brak w pakiecie[/I])[/COLOR]' + suffix += u' - [COLOR khaki]([I]brak w pakiecie[/I])[/COLOR]' sched = vod and vod.get('displaySchedules') if sched and sched[0].get('type') == 'SOON': - suffix += ' [COLOR gray] [LIGHT] (od %s)[/LIGHT][/COLOR]' % sched[0]['till'][:-3] - suffix = suffix or '' + suffix += u' [COLOR gray] [LIGHT] (od %s)[/LIGHT][/COLOR]' % sched[0]['till'][:-3] + suffix = PLchar(suffix or '') descr = PLchar(meta.opis or meta.tytul) + '\n' + suffix info = { 'title': PLchar(meta.tytul) + suffix, From e24dc4f19dcc0b92f2749475c12f085678a8abb6 Mon Sep 17 00:00:00 2001 From: rysson Date: Sun, 28 Nov 2021 19:11:24 +0100 Subject: [PATCH 5/6] PlayerMB: [1.10.5] fix kodowania. Fixes #673. --- srcs/plugin.video.playermb/addon.xml | 2 +- srcs/plugin.video.playermb/main.py | 93 +++++++++++++++------------- 2 files changed, 52 insertions(+), 43 deletions(-) diff --git a/srcs/plugin.video.playermb/addon.xml b/srcs/plugin.video.playermb/addon.xml index 9271750..8c09975 100644 --- a/srcs/plugin.video.playermb/addon.xml +++ b/srcs/plugin.video.playermb/addon.xml @@ -1,5 +1,5 @@ - + diff --git a/srcs/plugin.video.playermb/main.py b/srcs/plugin.video.playermb/main.py index bc7db06..023ab01 100644 --- a/srcs/plugin.video.playermb/main.py +++ b/srcs/plugin.video.playermb/main.py @@ -421,28 +421,36 @@ def busy(): xbmc.executebuiltin('ActivateWindow(busydialog)') -def PLchar(char): - if type(char) is not str: - char=char.encode('utf-8') - char = char.replace('\\u0105','\xc4\x85').replace('\\u0104','\xc4\x84') - char = char.replace('\\u0107','\xc4\x87').replace('\\u0106','\xc4\x86') - char = char.replace('\\u0119','\xc4\x99').replace('\\u0118','\xc4\x98') - char = char.replace('\\u0142','\xc5\x82').replace('\\u0141','\xc5\x81') - char = char.replace('\\u0144','\xc5\x84').replace('\\u0144','\xc5\x83') - char = char.replace('\\u00f3','\xc3\xb3').replace('\\u00d3','\xc3\x93') - char = char.replace('\\u015b','\xc5\x9b').replace('\\u015a','\xc5\x9a') - char = char.replace('\\u017a','\xc5\xba').replace('\\u0179','\xc5\xb9') - char = char.replace('\\u017c','\xc5\xbc').replace('\\u017b','\xc5\xbb') - char = char.replace('’',"'") - char = char.replace('–',"-") - char = char.replace('…',"...") - char = char.replace('„','"').replace('”','"') - char = char.replace('[…]',"...") - char = char.replace('&',"&") - char = char.replace(''',"'") - char = char.replace('"','"') - char = char.replace(' ',".").replace('&','&') - return char +def PLchar(*args, **kwargs): + sep = kwargs.pop('sep', ' ') + if kwargs: + raise TypeError('Unexpected keywoard arguemnt(s): %s' % ' '.join(kwargs.keys())) + out = '' + for i, char in enumerate(args): + if type(char) is not str: + char = char.encode('utf-8') + char = char.replace('\\u0105','\xc4\x85').replace('\\u0104','\xc4\x84') + char = char.replace('\\u0107','\xc4\x87').replace('\\u0106','\xc4\x86') + char = char.replace('\\u0119','\xc4\x99').replace('\\u0118','\xc4\x98') + char = char.replace('\\u0142','\xc5\x82').replace('\\u0141','\xc5\x81') + char = char.replace('\\u0144','\xc5\x84').replace('\\u0144','\xc5\x83') + char = char.replace('\\u00f3','\xc3\xb3').replace('\\u00d3','\xc3\x93') + char = char.replace('\\u015b','\xc5\x9b').replace('\\u015a','\xc5\x9a') + char = char.replace('\\u017a','\xc5\xba').replace('\\u0179','\xc5\xb9') + char = char.replace('\\u017c','\xc5\xbc').replace('\\u017b','\xc5\xbb') + char = char.replace('’',"'") + char = char.replace('–',"-") + char = char.replace('…',"...") + char = char.replace('„','"').replace('”','"') + char = char.replace('[…]',"...") + char = char.replace('&',"&") + char = char.replace(''',"'") + char = char.replace('"','"') + char = char.replace(' ',".").replace('&','&') + if i: + out += sep + out += char + return out def historyLoad(): @@ -488,7 +496,7 @@ def __init__(self): self.KATEGORIE = self.api_base + 'item/category/list' self.PRODUCTVODLIST = self.api_base + 'product/vod/list' - self.PRODUCTLIVELIST= self.api_base + 'product/list/list' + self.PRODUCTLIVELIST = self.api_base + 'product/list/list' self.PARAMS = {'4K': 'true', 'platform': PF} @@ -983,16 +991,17 @@ def add_media_item(self, mud, vid, meta=None, suffix=None, folder=False, isPlaya sched = vod and vod.get('displaySchedules') if sched and sched[0].get('type') == 'SOON': suffix += u' [COLOR gray] [LIGHT] (od %s)[/LIGHT][/COLOR]' % sched[0]['till'][:-3] - suffix = PLchar(suffix or '') - descr = PLchar(meta.opis or meta.tytul) + '\n' + suffix + suffix = suffix or '' + title = PLchar(meta.tytul, suffix, sep='') + descr = PLchar(meta.opis or meta.tytul, suffix, sep='\n') info = { - 'title': PLchar(meta.tytul) + suffix, + 'title': title, 'plot': descr, 'plotoutline': descr, 'tagline': descr, # 'genre': 'Nawalanka', # this is shown in Arctic: Zephyr 2 - Resurrection Mod } - add_item(str(vid), PLchar(meta.tytul) + suffix, meta.foto or ADDON_ICON, mud, + add_item(str(vid), title, meta.foto or ADDON_ICON, mud, folder=folder, isPlayable=isPlayable, infoLabels=info, art=meta.art, linkdata=linkdata) self._precessed_vid_list.add(vid) @@ -1023,13 +1032,12 @@ def listCollection(self): headers=self.HEADERS2, params=self.params(maxResults=True, order='asc')) mud = "listcollectContent" for vod in data: - dod = '' vid = vod['id'] slug = vod['slug'] meta = self.get_meta_data(vod) info = { - 'title': PLchar(meta.tytul) + dod, - 'plot': PLchar(meta.opis or meta.tytul) + '\n' + dod + 'title': PLchar(meta.tytul), + 'plot': PLchar(meta.opis or meta.tytul), } add_item(str(vid)+':'+str(slug), meta.tytul, meta.foto, mud, folder=True, infoLabels=info, art=meta.art) @@ -1088,13 +1096,13 @@ def listEpizody(self, tytsezid): sez = (vod["season"]["number"]) tyt = PLchar((vod["season"]["serial"]["title"])) if 'fakty-' in vod.get('shareUrl', ''): - name = '%s - %s' % (tyt, PLchar(vod['title'])) - tytul = '%s %s %s' % (tyt, self.dywiz, PLchar(vod['title'])) + name = PLchar(tyt, '-', vod['title']) + tytul = PLchar(tyt, self.dywiz, vod['title']) else: name = '%s - S%02dE%02d' % (tyt, sez, epiz) - tytul = '%s %s S%02dE%02d' % (tyt, self.dywiz, sez, epiz) + tytul = '%s %s S%02dE%02d' % (tyt, PLchar(self.dywiz), sez, epiz) if vod.get('title'): - tytul += ' %s %s' % (self.dywiz, vod['title'].strip()) + tytul += PLchar('', self.dywiz, vod['title'].strip()) meta = meta._replace(tytul=tytul) self.add_media_item('playvid', vid, meta, folder=False, vod=vod, linkdata={'name': name}) setView('episodes') @@ -1108,13 +1116,13 @@ def getSezony(self, id, tytul, opis, foto, typ): out = [] sezony = getRequests(urlk, headers=self.HEADERS2, params=self.PARAMS) for sezon in sezony: - seas=str(sezon['number']) - urlid = '%s:%s'%(str(id),str(sezon['id'])) - title = '%s - Sezon %s'%(tytul,seas) + seas = str(sezon['number']) + urlid = '%s:%s' % (id, sezon['id']) + title = '%s - Sezon %s' % (tytul, seas) if not typ: - seas=str(sezon["display"]) - title = '%s / %s'%(tytul,seas) - out.append({'title':PLchar(title),'url':urlid,'img':foto,'plot':PLchar(opis)}) + seas = str(sezon["display"]) + title = '%s / %s' % (tytul, seas) + out.append({'title': PLchar(title), 'url': urlid, 'img': foto, 'plot': PLchar(opis)}) return out def listCategSerial(self, id): @@ -1128,9 +1136,10 @@ def listCategSerial(self, id): typ = False items = self.getSezony(id, meta.tytul, meta.opis, meta.foto, typ) for f in items: - add_item(name=f.get('title'), url=f.get('url'), mode='listEpizody', image=f.get('img'), folder=True, infoLabels=f) + add_item(name=f.get('title'), url=f.get('url'), mode='listEpizody', image=f.get('img'), + folder=True, infoLabels=f) setView('episodes') - #xbmcplugin.setContent(addon_handle, 'episodes') + # xbmcplugin.setContent(addon_handle, 'episodes') xbmcplugin.addSortMethod(addon_handle, sortMethod=xbmcplugin.SORT_METHOD_TITLE, label2Mask="%R, %Y, %P") xbmcplugin.endOfDirectory(addon_handle) From 87e1f0bfed3876a623277dcea73c0be7eb605039 Mon Sep 17 00:00:00 2001 From: rysson Date: Sat, 4 Dec 2021 19:50:19 +0100 Subject: [PATCH 6/6] version bumb --- srcs/plugin.video.playermb/addon.xml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/srcs/plugin.video.playermb/addon.xml b/srcs/plugin.video.playermb/addon.xml index 8c09975..73531de 100644 --- a/srcs/plugin.video.playermb/addon.xml +++ b/srcs/plugin.video.playermb/addon.xml @@ -1,5 +1,5 @@ - + @@ -25,9 +25,10 @@ resources/screenshot-01.jpg resources/screenshot-02.jpg - 1.10.1 + 1.11 - forsowanie seriali nawet gdy nie są w liście dozwolonych - usuwanie duplikatów +- poprawa dostępnych materiałów 1.10 - szybsze połączenia i obsługa błędów SSL - obrazki