From 9075e266cdb3e84c31d12e9d521097ab1c1da144 Mon Sep 17 00:00:00 2001 From: pietje666 Date: Fri, 15 Dec 2017 22:53:37 +0100 Subject: [plugin.video.vrt.nu] 1.1.0 --- plugin.video.vrt.nu/addon.py | 24 +++++---- plugin.video.vrt.nu/addon.xml | 4 +- .../resources/lib/helperobjects/helperobjects.py | 8 +-- .../resources/lib/kodiwrappers/kodiwrapper.py | 20 ++++--- .../resources/lib/vrtplayer/metadatacreator.py | 2 +- .../resources/lib/vrtplayer/urltostreamservice.py | 18 +++---- .../resources/lib/vrtplayer/vrtplayer.py | 62 +++++++++++++--------- 7 files changed, 82 insertions(+), 56 deletions(-) diff --git a/plugin.video.vrt.nu/addon.py b/plugin.video.vrt.nu/addon.py index dbeec3d..37c4ede 100644 --- a/plugin.video.vrt.nu/addon.py +++ b/plugin.video.vrt.nu/addon.py @@ -5,33 +5,37 @@ from resources.lib.vrtplayer import vrtplayer from resources.lib.kodiwrappers import kodiwrapper from resources.lib.vrtplayer import actions from resources.lib.kodiwrappers import sortmethod +from resources.lib.vrtplayer import urltostreamservice -_addon_ = xbmcaddon.Addon() _url = sys.argv[0] _handle = int(sys.argv[1]) + def router(params_string): addon = xbmcaddon.Addon() kodi_wrapper = kodiwrapper.KodiWrapper(_handle, _url, addon) - vrt_player = vrtplayer.VRTPlayer(addon, addon.getAddonInfo("path")) + stream_service = urltostreamservice.UrlToStreamService(vrtplayer.VRTPlayer._VRT_BASE, + vrtplayer.VRTPlayer._VRTNU_BASE_URL, + kodi_wrapper) + vrt_player = vrtplayer.VRTPlayer(addon.getAddonInfo("path"), kodi_wrapper, stream_service) params = dict(parse_qsl(params_string)) if params: if params['action'] == actions.LISTING_AZ: - kodi_wrapper.show_listing(vrt_player.get_az_menu_items(), sortmethod.ALPHABET) + vrt_player.show_az_menu_items() elif params['action'] == actions.LISTING_CATEGORIES: - kodi_wrapper.show_listing(vrt_player.get_category_menu_items(), sortmethod.ALPHABET) + vrt_player.show_category_menu_items() elif params['action'] == actions.LISTING_LIVE: - kodi_wrapper.show_listing(vrt_player.get_livestream_items(), sortmethod.ALPHABET) + vrt_player.show_livestream_items() elif params['action'] == actions.LISTING_VIDEOS: - kodi_wrapper.show_listing(vrt_player.get_videos(params['video'])) + vrt_player.show_videos(params['video']) elif params['action'] == actions.LISTING_CATEGORY_VIDEOS: - kodi_wrapper.show_listing(vrt_player.get_video_category_episodes(params['video']), sortmethod.ALPHABET) + vrt_player.show_video_category_episodes(params['video']) elif params['action'] == actions.PLAY: - kodi_wrapper.play_video(params['video']) + vrt_player.play_vrtnu_video(params['video']) elif params['action'] == actions.PLAY_LIVE: - kodi_wrapper.play_livestream(params['video']) + vrt_player.play_livestream(params['video']) else: - kodi_wrapper.show_listing(vrt_player.get_main_menu_items(), sortmethod.ALPHABET) + vrt_player.show_main_menu_items() if __name__ == '__main__': router(sys.argv[2][1:]) diff --git a/plugin.video.vrt.nu/addon.xml b/plugin.video.vrt.nu/addon.xml index 3969872..8a45d0d 100644 --- a/plugin.video.vrt.nu/addon.xml +++ b/plugin.video.vrt.nu/addon.xml @@ -1,7 +1,7 @@ @@ -23,6 +23,8 @@ all GNU General Public License, v3 +v1.1.0 (15-12-2017) +- Refactored internal code v1.0.0 (01-10-2017) - Fixed issue where all the videos would not be able to play, implemented new way of getting the streaming urls - Fixed bug where a single video would not be listed when there is also a part "ANDEREN BEKEKEN OOK" present diff --git a/plugin.video.vrt.nu/resources/lib/helperobjects/helperobjects.py b/plugin.video.vrt.nu/resources/lib/helperobjects/helperobjects.py index 599d3ef..9508545 100644 --- a/plugin.video.vrt.nu/resources/lib/helperobjects/helperobjects.py +++ b/plugin.video.vrt.nu/resources/lib/helperobjects/helperobjects.py @@ -16,14 +16,14 @@ class StreamURLS: class Credentials: - def __init__(self, addon): - self.addon = addon + def __init__(self, kodi_wrapper): + self._kodi_wrapper = kodi_wrapper self.reload() def are_filled_in(self): return not (self.username is None or self.password is None or self.username == "" or self.password == "") def reload(self): - self.username = self.addon.getSetting("username") - self.password = self.addon.getSetting("password") + self.username = self._kodi_wrapper.get_setting("username") + self.password = self._kodi_wrapper.get_setting("password") diff --git a/plugin.video.vrt.nu/resources/lib/kodiwrappers/kodiwrapper.py b/plugin.video.vrt.nu/resources/lib/kodiwrappers/kodiwrapper.py index 7edcccd..6df324d 100644 --- a/plugin.video.vrt.nu/resources/lib/kodiwrappers/kodiwrapper.py +++ b/plugin.video.vrt.nu/resources/lib/kodiwrappers/kodiwrapper.py @@ -3,7 +3,6 @@ import xbmcgui import xbmcplugin from urllib import urlencode from resources.lib.vrtplayer import vrtplayer -from resources.lib.vrtplayer import urltostreamservice from resources.lib.kodiwrappers import sortmethod class KodiWrapper: @@ -35,11 +34,7 @@ class KodiWrapper: xbmcplugin.endOfDirectory(self._handle) - def play_video(self, path): - stream_service = urltostreamservice.UrlToStreamService(vrtplayer.VRTPlayer._VRT_BASE, - vrtplayer.VRTPlayer._VRTNU_BASE_URL, - self._addon) - stream = stream_service.get_stream_from_url(path) + def play_video(self, stream): if stream is not None: play_item = xbmcgui.ListItem(path=stream.stream_url) if stream.subtitle_url is not None: @@ -49,3 +44,16 @@ class KodiWrapper: def play_livestream(self, path): play_item = xbmcgui.ListItem(path=path) xbmcplugin.setResolvedUrl(self._handle, True, listitem=play_item) + + def show_ok_dialog(self, title, message): + xbmcgui.Dialog().ok(self._addon.getAddonInfo('name'), title, message) + + def get_localized_string(self, string_id): + return self._addon.getLocalizedString(string_id) + + def get_setting(self, setting_id ): + return self._addon.getSetting(setting_id) + + def open_settings(self): + self._addon.openSettings() + diff --git a/plugin.video.vrt.nu/resources/lib/vrtplayer/metadatacreator.py b/plugin.video.vrt.nu/resources/lib/vrtplayer/metadatacreator.py index 44a3c35..7abfb9d 100644 --- a/plugin.video.vrt.nu/resources/lib/vrtplayer/metadatacreator.py +++ b/plugin.video.vrt.nu/resources/lib/vrtplayer/metadatacreator.py @@ -29,7 +29,7 @@ class MetadataCreator: return self._datetime @datetime.setter - def datetime (self, value): + def datetime(self, value): self._datetime = value def get_video_dictionary(self): diff --git a/plugin.video.vrt.nu/resources/lib/vrtplayer/urltostreamservice.py b/plugin.video.vrt.nu/resources/lib/vrtplayer/urltostreamservice.py index f295d65..f14e5ae 100644 --- a/plugin.video.vrt.nu/resources/lib/vrtplayer/urltostreamservice.py +++ b/plugin.video.vrt.nu/resources/lib/vrtplayer/urltostreamservice.py @@ -1,6 +1,4 @@ -import xbmcgui import requests -import xbmc import json import cookielib import urlparse @@ -13,16 +11,16 @@ class UrlToStreamService: _API_KEY ="3_qhEcPa5JGFROVwu5SWKqJ4mVOIkwlFNMSKwzPDAh8QZOtHqu6L4nD5Q7lk0eXOOG" _BASE_GET_STREAM_URL_PATH = "https://mediazone.vrt.be/api/v1/vrtvideo/assets/" - def __init__(self, vrt_base, vrtnu_base_url, addon): + def __init__(self, vrt_base, vrtnu_base_url, kodi_wrapper): self._vrt_base = vrt_base self._vrtnu_base_url = vrtnu_base_url - self._addon = addon + self._kodi_wrapper = kodi_wrapper self._session = requests.session() def get_stream_from_url(self, url): - cred = helperobjects.Credentials(self._addon) + cred = helperobjects.Credentials(self._kodi_wrapper) if not cred.are_filled_in(): - self._addon.openSettings() + self._kodi_wrapper.open_settings() cred.reload() url = urlparse.urljoin(self._vrt_base, url) r = self._session.post("https://accounts.eu1.gigya.com/accounts.login", @@ -55,13 +53,13 @@ class UrlToStreamService: stream_response = self._session.get(final_url) hls = self.__get_hls(stream_response.json()['targetUrls']).replace("https", "http") subtitle = None - if self._addon.getSetting("showsubtitles") == "true": + if self._kodi_wrapper.get_setting("showsubtitles") == "true": subtitle = self.__get_subtitle(stream_response.json()['subtitleUrls']) return helperobjects.StreamURLS(hls, subtitle) else: - xbmcgui.Dialog().ok(self._addon.getAddonInfo('name'), - self._addon.getLocalizedString(32051), - self._addon.getLocalizedString(32052)) + title = self._kodi_wrapper.get_localized_string(32051) + message = self._kodi_wrapper.get_localized_string(32052) + self._kodi_wrapper.show_ok_dialog(title, message) @staticmethod def __get_hls(dictionary): diff --git a/plugin.video.vrt.nu/resources/lib/vrtplayer/vrtplayer.py b/plugin.video.vrt.nu/resources/lib/vrtplayer/vrtplayer.py index 3b413ce..9315387 100644 --- a/plugin.video.vrt.nu/resources/lib/vrtplayer/vrtplayer.py +++ b/plugin.video.vrt.nu/resources/lib/vrtplayer/vrtplayer.py @@ -8,6 +8,8 @@ from resources.lib.vrtplayer import metadatacollector from resources.lib.vrtplayer import statichelper from resources.lib.vrtplayer import actions from resources.lib.vrtplayer import metadatacreator +from resources.lib.kodiwrappers import sortmethod + class VRTPlayer: @@ -21,33 +23,38 @@ class VRTPlayer: _VRTNU_BASE_URL = urljoin(_VRT_BASE, "/vrtnu/") _VRTNU_SEARCH_URL = "https://search.vrt.be/suggest?facets[categories]=" - def __init__(self, addon, addon_path): + def __init__(self, addon_path, kodi_wrapper, url_to_stream_service): self.metadata_collector = metadatacollector.MetadataCollector() - self._addon = addon self._addon_path = addon_path + self._kodi_wrapper = kodi_wrapper + self._url_toStream_service = url_to_stream_service - def get_main_menu_items(self): - return {helperobjects.TitleItem(self._addon.getLocalizedString(32091), {'action': actions.LISTING_AZ}, False, + def show_main_menu_items(self): + menu_items = {helperobjects.TitleItem(self._kodi_wrapper.get_localized_string(32091), {'action': actions.LISTING_AZ}, False, None), - helperobjects.TitleItem(self._addon.getLocalizedString(32092), {'action': actions.LISTING_CATEGORIES}, + helperobjects.TitleItem(self._kodi_wrapper.get_localized_string(32092), {'action': actions.LISTING_CATEGORIES}, False, None), - helperobjects.TitleItem(self._addon.getLocalizedString(32100), {'action': actions.LISTING_LIVE}, False, + helperobjects.TitleItem(self._kodi_wrapper.get_localized_string(32100), {'action': actions.LISTING_LIVE}, False, None)} + self._kodi_wrapper.show_listing(menu_items, sortmethod.ALPHABET) - def get_az_menu_items(self): + def show_az_menu_items(self): joined_url = urljoin(self._VRTNU_BASE_URL, "./a-z/") - return self.__get_menu_items(joined_url, {"class": "tile"}, actions.LISTING_VIDEOS, self.metadata_collector.get_az_metadata) + menu_items = self.__get_menu_items(joined_url, {"class": "tile"}, actions.LISTING_VIDEOS, + self.metadata_collector.get_az_metadata) + self._kodi_wrapper.show_listing(menu_items, sortmethod.ALPHABET) - def get_category_menu_items(self): + def show_category_menu_items(self): joined_url = urljoin(self._VRTNU_BASE_URL, "./categorieen/") - return self.__get_menu_items(joined_url, {"class": "tile tile--category"}, actions.LISTING_CATEGORY_VIDEOS) + menu_items = self.__get_menu_items(joined_url, {"class": "tile tile--category"}, actions.LISTING_CATEGORY_VIDEOS) + self._kodi_wrapper.show_listing(menu_items, sortmethod.ALPHABET) - def get_video_category_episodes(self, path): + def show_video_category_episodes(self, path): category = path.split('/')[-2] joined_url = self._VRTNU_SEARCH_URL + category response = requests.get(joined_url) programs = response.json() - listing = [] + menu_items = [] for program in programs: title = program["title"] plot = BeautifulSoup(program["description"], "html.parser").text @@ -62,25 +69,33 @@ class VRTPlayer: "") item = helperobjects.TitleItem(title, {'action': actions.LISTING_VIDEOS, 'video': link_to_video}, False, thumbnail, video_dictionary) - listing.append(item) - return listing + menu_items.append(item) + self._kodi_wrapper.show_listing(menu_items, sortmethod.ALPHABET) - def get_livestream_items(self): - return {helperobjects.TitleItem(self._addon.getLocalizedString(32101), + def play_vrtnu_video(self, url): + stream = self._url_toStream_service.get_stream_from_url(url) + self._kodi_wrapper.play_video(stream) + + def play_livestream(self, url): + self._kodi_wrapper.play_livestream(url) + + def show_livestream_items(self): + livestream_items = {helperobjects.TitleItem(self._kodi_wrapper.get_localized_string(32101), {'action': actions.PLAY_LIVE, 'video': self._EEN_LIVESTREAM}, True, self.__get_media("een.png")), - helperobjects.TitleItem(self._addon.getLocalizedString(32102), + helperobjects.TitleItem(self._kodi_wrapper.get_localized_string(32102), {'action': actions.PLAY_LIVE, 'video': self._CANVAS_LIVESTREAM_}, True, self.__get_media("canvas.png")), - helperobjects.TitleItem(self._addon.getLocalizedString(32103), + helperobjects.TitleItem(self._kodi_wrapper.get_localized_string(32103), {'action': actions.PLAY_LIVE, 'video': self._KETNET_LIVESTREAM}, True, self.__get_media("ketnet.png")), - helperobjects.TitleItem(self._addon.getLocalizedString(32104), + helperobjects.TitleItem(self._kodi_wrapper.get_localized_string(32104), {'action': actions.PLAY_LIVE, 'video': self._SPORZA_LIVESTREAM}, True, self.__get_media("sporza.png")) } + self._kodi_wrapper.show_listing(livestream_items, sortmethod.ALPHABET) - def get_videos(self, path): + def show_videos(self, path): url = urljoin(self._VRT_BASE, path) #xbmc.log(url, xbmc.LOGWARNING) # go to url.relevant gets redirected and go on with this url @@ -102,7 +117,7 @@ class VRTPlayer: title_items.extend(self.__get_multiple_videos(soup)) else: title_items.extend(self.__get_single_video(relevant_path.url, soup)) - return title_items + self._kodi_wrapper.show_listing(title_items) def __get_episodes(self, option_tags): @@ -118,7 +133,6 @@ class VRTPlayer: title_items.append(helperobjects.TitleItem(title, {"action" : actions.LISTING_VIDEOS, 'video':path}, False)) return title_items - def __get_multiple_videos(self, tiles): title_items = [] episode_list = tiles.find("div", {"id": "episodelist__slider"}) @@ -136,7 +150,7 @@ class VRTPlayer: path = tile["href"] video_dictionary = self.metadata_collector.get_multiple_layout_episode_metadata(tile) - title_items.append(helperobjects.TitleItem(title, {"action": "play", "video": path}, True, thumbnail, video_dictionary)) + title_items.append(helperobjects.TitleItem(title, {"action": actions.PLAY, "video": path}, True, thumbnail, video_dictionary)) return title_items def __get_single_video(self, path, soup): @@ -149,7 +163,7 @@ class VRTPlayer: vrt_video = soup.find(class_="vrtvideo") thumbnail = VRTPlayer.__format_image_url(vrt_video) - title_items.append(helperobjects.TitleItem(list_item_title, {"action": "play", "video": path}, True, thumbnail, video_dictionary)) + title_items.append(helperobjects.TitleItem(list_item_title, {"action": actions.PLAY, "video": path}, True, thumbnail, video_dictionary)) return title_items def __get_media(self, file_name): -- cgit v1.2.3