Fix incomplete descriptions (#75)

* Fix incomplete descriptions

This PR includes:
- Use full description for episodes rather than cut-off description
- Use the program description if the season description is missing

* Update kodiutils.py

Co-authored-by: Michaël Arnauts <michael.arnauts@gmail.com>
This commit is contained in:
Dag Wieers 2021-02-16 16:57:52 +01:00 committed by GitHub
parent 1a541552d7
commit 9ddc73094d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 33 additions and 4 deletions

View File

@ -5,6 +5,7 @@ from __future__ import absolute_import, division, unicode_literals
import logging import logging
import os import os
import re
import xbmc import xbmc
import xbmcaddon import xbmcaddon
@ -12,6 +13,12 @@ import xbmcgui
import xbmcplugin import xbmcplugin
import xbmcvfs import xbmcvfs
try: # Python 3
from html import unescape
except ImportError: # Python 2
from HTMLParser import HTMLParser
unescape = HTMLParser().unescape
ADDON = xbmcaddon.Addon() ADDON = xbmcaddon.Addon()
SORT_METHODS = dict( SORT_METHODS = dict(
@ -27,6 +34,19 @@ DEFAULT_SORT_METHODS = [
'unsorted', 'title' 'unsorted', 'title'
] ]
HTML_MAPPING = [
(re.compile(r'<(/?)i(|\s[^>]+)>', re.I), '[\\1I]'),
(re.compile(r'<(/?)b(|\s[^>]+)>', re.I), '[\\1B]'),
(re.compile(r'<em(|\s[^>]+)>', re.I), '[I]'),
(re.compile(r'</em>', re.I), '[/I]'),
(re.compile(r'<(strong|h\d)>', re.I), '[B]'),
(re.compile(r'</(strong|h\d)>', re.I), '[/B]'),
(re.compile(r'<li>', re.I), '- '),
(re.compile(r'</?(li|ul|ol)(|\s[^>]+)>', re.I), '\n'),
(re.compile(r'</?(code|div|p|pre|span)(|\s[^>]+)>', re.I), ''),
(re.compile('(&nbsp;\n){2,}', re.I), '\n'), # Remove repeating non-blocking spaced newlines
]
STREAM_HLS = 'hls' STREAM_HLS = 'hls'
STREAM_DASH = 'mpd' STREAM_DASH = 'mpd'
@ -87,6 +107,15 @@ def from_unicode(text, encoding='utf-8', errors='strict'):
return text return text
def html_to_kodi(text):
"""Convert HTML content into Kodi formatted text"""
if not text:
return text
for key, val in HTML_MAPPING:
text = key.sub(val, text)
return unescape(text).strip()
def addon_icon(): def addon_icon():
"""Cache and return add-on icon""" """Cache and return add-on icon"""
return get_addon_info('icon') return get_addon_info('icon')

View File

@ -110,7 +110,7 @@ class Catalog:
info_dict={ info_dict={
'tvshowtitle': program.title, 'tvshowtitle': program.title,
'title': kodiutils.localize(30205, season=season.number), # Season {season} 'title': kodiutils.localize(30205, season=season.number), # Season {season}
'plot': season.description, 'plot': season.description or program.description,
'set': program.title, 'set': program.title,
} }
) )

View File

@ -12,7 +12,7 @@ from datetime import datetime
import requests import requests
from resources.lib.kodiutils import STREAM_DASH, STREAM_HLS from resources.lib.kodiutils import html_to_kodi, STREAM_DASH, STREAM_HLS
from resources.lib.viervijfzes import ResolvedStream from resources.lib.viervijfzes import ResolvedStream
try: # Python 3 try: # Python 3
@ -532,7 +532,7 @@ class ContentApi:
path=playlist['link'].lstrip('/'), path=playlist['link'].lstrip('/'),
channel=playlist['pageInfo']['brand'], channel=playlist['pageInfo']['brand'],
title=playlist['title'], title=playlist['title'],
description=playlist['pageInfo']['description'], description=html_to_kodi(playlist.get('description')),
number=playlist['episodes'][0]['seasonNumber'], # You did not see this number=playlist['episodes'][0]['seasonNumber'], # You did not see this
) )
for key, playlist in enumerate(data['playlists']) if playlist['episodes'] for key, playlist in enumerate(data['playlists']) if playlist['episodes']
@ -572,7 +572,7 @@ class ContentApi:
channel=data.get('pageInfo', {}).get('site'), channel=data.get('pageInfo', {}).get('site'),
program_title=data.get('program', {}).get('title') if data.get('program') else data.get('title'), program_title=data.get('program', {}).get('title') if data.get('program') else data.get('title'),
title=data.get('title'), title=data.get('title'),
description=data.get('pageInfo', {}).get('description'), description=html_to_kodi(data.get('description')),
cover=data.get('image'), cover=data.get('image'),
background=data.get('image'), background=data.get('image'),
duration=data.get('duration'), duration=data.get('duration'),