summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpietje666 <martijn.moreel@gmail.com>2017-12-15 22:53:37 +0100
committerMartijn Kaijser <martijn@xbmc.org>2017-12-17 05:50:34 +0000
commit9075e266cdb3e84c31d12e9d521097ab1c1da144 (patch)
tree802dea30dd1bec32a130fd11fc6c88cf11ec21b8
parent9b1f805af94d8800efa8d51a49e6bcd3fdb4bda0 (diff)
[plugin.video.vrt.nu] 1.1.0
-rw-r--r--plugin.video.vrt.nu/addon.py24
-rw-r--r--plugin.video.vrt.nu/addon.xml4
-rw-r--r--plugin.video.vrt.nu/resources/lib/helperobjects/helperobjects.py8
-rw-r--r--plugin.video.vrt.nu/resources/lib/kodiwrappers/kodiwrapper.py20
-rw-r--r--plugin.video.vrt.nu/resources/lib/vrtplayer/metadatacreator.py2
-rw-r--r--plugin.video.vrt.nu/resources/lib/vrtplayer/urltostreamservice.py18
-rw-r--r--plugin.video.vrt.nu/resources/lib/vrtplayer/vrtplayer.py62
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 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<addon id="plugin.video.vrt.nu"
name="VRT Nu"
- version="1.0.0"
+ version="1.1.0"
provider-name="Martijn Moreel">
<requires>
@@ -23,6 +23,8 @@
<platform>all</platform>
<license>GNU General Public License, v3</license>
<news>
+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):