From f4a06ccf99d996892beb10834cf1ecbaf933409b Mon Sep 17 00:00:00 2001 From: Dag Wieers Date: Wed, 22 May 2019 01:27:29 +0200 Subject: [PATCH] Add a channel filter for Most recent and Soon offline This PR includes: - Replace a fixed channel filter by a dynamic filter - Add a Channels settings tab for configuring the filter --- .../resource.language.en_gb/strings.po | 76 +++++++++++++++--- .../resource.language.nl_nl/strings.po | 78 ++++++++++++++++--- resources/lib/kodiwrappers/kodiwrapper.py | 5 +- resources/lib/vrtplayer/vrtapihelper.py | 9 ++- resources/settings.xml | 37 ++++++--- service.py | 3 + test/xbmcaddon.py | 25 +++++- 7 files changed, 193 insertions(+), 40 deletions(-) diff --git a/resources/language/resource.language.en_gb/strings.po b/resources/language/resource.language.en_gb/strings.po index f660e95f..b89e3857 100644 --- a/resources/language/resource.language.en_gb/strings.po +++ b/resources/language/resource.language.en_gb/strings.po @@ -331,46 +331,102 @@ msgid "In case you have limited bandwidth available, you may want to specify a m msgstr "" msgctxt "#30860" -msgid "Troubleshooting" +msgid "Channels" msgstr "" msgctxt "#30861" -msgid "Cache" +msgid "Select channels to use for 'Most recent' and 'Soon offline' listings" msgstr "" msgctxt "#30863" -msgid "Clear VRT tokens" +msgid "Eén" +msgstr "" + +msgctxt "#30864" +msgid "Canvas" msgstr "" msgctxt "#30865" -msgid "Refresh favorites" +msgid "Ketnet" +msgstr "" + +msgctxt "#30866" +msgid "Ketnet Junior" msgstr "" msgctxt "#30867" -msgid "Invalidate local HTTP caches" +msgid "Sporza" +msgstr "" + +msgctxt "#30868" +msgid "Radio 1" msgstr "" msgctxt "#30869" -msgid "Streaming" +msgid "Radio 2" +msgstr "" + +msgctxt "#30870" +msgid "Klara" msgstr "" msgctxt "#30871" -msgid "Use InputStream Adaptive" +msgid "Studio Brussel" +msgstr "" + +msgctxt "#30872" +msgid "MNM" msgstr "" msgctxt "#30873" +msgid "VRT NXT" +msgstr "" + +msgctxt "#30874" +msgid "VRT NWS" +msgstr "" + +msgctxt "#30900" +msgid "Troubleshooting" +msgstr "" + +msgctxt "#30901" +msgid "Cache" +msgstr "" + +msgctxt "#30903" +msgid "Clear VRT tokens" +msgstr "" + +msgctxt "#30905" +msgid "Refresh favorites" +msgstr "" + +msgctxt "#30907" +msgid "Invalidate local HTTP caches" +msgstr "" + +msgctxt "#30909" +msgid "Streaming" +msgstr "" + +msgctxt "#30911" +msgid "Use InputStream Adaptive" +msgstr "" + +msgctxt "#30913" msgid "InputStream Adaptive settings..." msgstr "" -msgctxt "#30875" +msgctxt "#30915" msgid "Install Widevine... [COLOR gray][I](needed for DRM content)[/I][/COLOR]" msgstr "" -msgctxt "#30877" +msgctxt "#30917" msgid "Logging" msgstr "" -msgctxt "#30879" +msgctxt "#30919" msgid "Log level" msgstr "" diff --git a/resources/language/resource.language.nl_nl/strings.po b/resources/language/resource.language.nl_nl/strings.po index d6cb1e0c..61954c85 100644 --- a/resources/language/resource.language.nl_nl/strings.po +++ b/resources/language/resource.language.nl_nl/strings.po @@ -307,47 +307,103 @@ msgctxt "#30849" msgid "Maximum bandwidth (kbps)" msgstr "Maximale bandbreedte (kbps)" -msgctxt "#30060" +msgctxt "#30860" +msgid "Channels" +msgstr "Kanalen" + +msgctxt "#30861" +msgid "Select channels for 'Most recent' and 'Soon offline' listings" +msgstr "Selecteer kanalen voor de 'Meest recent' en 'Binnenkort verwijderd' lijsten" + +msgctxt "#30863" +msgid "Eén" +msgstr "Eén" + +msgctxt "#30864" +msgid "Canvas" +msgstr "Canvas" + +msgctxt "#30865" +msgid "Ketnet" +msgstr "Ketnet" + +msgctxt "#30866" +msgid "Ketnet Junior" +msgstr "Ketnet Junior" + +msgctxt "#30867" +msgid "Sporza" +msgstr "Sporza" + +msgctxt "#30868" +msgid "Radio 1" +msgstr "Radio 1" + +msgctxt "#30869" +msgid "Radio 2" +msgstr "Radio 2" + +msgctxt "#30870" +msgid "Klara" +msgstr "Klara" + +msgctxt "#30871" +msgid "Studio Brussel" +msgstr "Studio Brussel" + +msgctxt "#30872" +msgid "MNM" +msgstr "MNM" + +msgctxt "#30873" +msgid "VRT NXT" +msgstr "VRT NXT" + +msgctxt "#30874" +msgid "VRT NWS" +msgstr "VRT NWS" + +msgctxt "#30900" msgid "Troubleshooting" msgstr "Foutopsporing" -msgctxt "#30861" +msgctxt "#30901" msgid "Cache" msgstr "Cache" -msgctxt "#30063" +msgctxt "#30903" msgid "Clear VRT tokens" msgstr "Verwijder VRT tokens" -msgctxt "#30065" +msgctxt "#30905" msgid "Refresh favorites" msgstr "Ververs gevolgde programma's" -msgctxt "#30867" +msgctxt "#30907" msgid "Invalidate local HTTP caches" msgstr "Invalideer local HTTP caches" -msgctxt "#30069" +msgctxt "#30909" msgid "Streaming" msgstr "Streaming" -msgctxt "#30870" +msgctxt "#30911" msgid "Use InputStream Adaptive" msgstr "Gebruik InputStream Adaptive" -msgctxt "#30073" +msgctxt "#30913" msgid "InputStream Adaptive settings..." msgstr "InputStream Adaptive instellingen..." -msgctxt "#30075" +msgctxt "#30915" msgid "Install Widevine... [COLOR gray][I](needed for DRM content)[/I][/COLOR]" msgstr "Installeer Widevine... [COLOR gray][I](nodig voor DRM content)[/I][/COLOR]" -msgctxt "#30077" +msgctxt "#30917" msgid "Logging" msgstr "Logboek" -msgctxt "#30079" +msgctxt "#30919" msgid "Log level" msgstr "Log level" diff --git a/resources/lib/kodiwrappers/kodiwrapper.py b/resources/lib/kodiwrappers/kodiwrapper.py index 70f8b532..1800cf5e 100644 --- a/resources/lib/kodiwrappers/kodiwrapper.py +++ b/resources/lib/kodiwrappers/kodiwrapper.py @@ -470,8 +470,11 @@ def update_cache(self, path, data): def invalidate_cache(self, path): self.delete_file(self._cache_path + path) - def invalidate_caches(self): + def invalidate_caches(self, expr=None): + import fnmatch _, files = self.listdir(self._cache_path) + if expr: + files = fnmatch.filter(files, expr) for f in files: self.delete_file(self._cache_path + f) diff --git a/resources/lib/vrtplayer/vrtapihelper.py b/resources/lib/vrtplayer/vrtapihelper.py index 92319a46..997ab114 100644 --- a/resources/lib/vrtplayer/vrtapihelper.py +++ b/resources/lib/vrtplayer/vrtapihelper.py @@ -4,7 +4,7 @@ from __future__ import absolute_import, division, unicode_literals from resources.lib.helperobjects.helperobjects import TitleItem -from resources.lib.vrtplayer import actions, metadatacreator, statichelper +from resources.lib.vrtplayer import CHANNELS, actions, metadatacreator, statichelper try: from urllib.parse import urlencode, unquote @@ -28,6 +28,7 @@ def __init__(self, _kodi, _favorites): self._showfanart = _kodi.get_setting('showfanart') == 'true' self._showpermalink = _kodi.get_setting('showpermalink') == 'true' self._favorites = _favorites + self._channel_filter = [channel.get('name') for channel in CHANNELS if _kodi.get_setting(channel.get('name')) == 'true'] def get_tvshow_items(self, category=None, channel=None, filtered=False): params = dict() @@ -125,10 +126,10 @@ def get_episode_items(self, path=None, page=None, show_seasons=False, filtered=F if statichelper.is_filtered(filtered): params['facets[programName]'] = '[%s]' % (','.join(self._favorites.names())) - cache_file = '%s-filtered.json' % variety + cache_file = 'my-%s-%s.json' % (variety, page) else: - params['facets[programBrands]'] = '[een,canvas,sporza,vrtnws,vrtnxt,radio1,radio2,klara,stubru,mnm]' - cache_file = '%s.json' % variety + params['facets[programBrands]'] = '[%s]' % ','.join(self._channel_filter) + cache_file = '%s-%s.json' % (variety, page) # Try the cache if it is fresh api_json = self._kodi.get_cache(cache_file, ttl=60 * 60) diff --git a/resources/settings.xml b/resources/settings.xml index fc853420..c13be1c5 100644 --- a/resources/settings.xml +++ b/resources/settings.xml @@ -21,16 +21,31 @@ - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/service.py b/service.py index 816e2261..95becb70 100644 --- a/service.py +++ b/service.py @@ -26,6 +26,9 @@ def onSettingsChanged(self): _kodi.log_notice('VRT NU Addon: settings changed') _kodi.container_refresh() + _kodi.invalidate_caches('offline-*.json') + _kodi.invalidate_caches('recent-*.json') + _tokenresolver = tokenresolver.TokenResolver(_kodi) _tokenresolver.reset_cookies() diff --git a/test/xbmcaddon.py b/test/xbmcaddon.py index 8fbaa684..ee98f257 100644 --- a/test/xbmcaddon.py +++ b/test/xbmcaddon.py @@ -32,14 +32,33 @@ # FIXME: Maybe move this to test/userdata/settings.xml ? SETTINGS = { + # credentials 'username': 'qsdfdsq', 'password': 'qsdfqsdfds', - 'log_level': 'Verbose', - 'max_bandwidth': 0, + # interface + 'usefavorites': 'false', 'showpermalink': 'true', + 'usemenucaching': 'true', + 'usehttpcaching': 'true', + # playback 'showsubtitles': 'true', + 'max_bandwidth': 0, 'usedrm': 'false', - 'usefavorites': 'false', + # channels + 'een': 'true', + 'canvas': 'true', + 'ketnet': 'false', + 'ketnet-jr': 'false', + 'sporza': 'true', + 'radio1': 'true', + 'radio2': 'true', + 'klara': 'true', + 'stubru': 'true', + 'mnm': 'true', + 'vrtnws': 'true', + 'vrtnxt': 'true', + # troubleshooting + 'log_level': 'Verbose', } # Read credentials from credentials.json