Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ensure season and episode listings use correct view #223

Merged
merged 1 commit into from
May 14, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,4 @@ script:
- python test/vrtplayertests.py
- python test/apihelpertests.py
- python test/tvguidetests.py
- python test/searchtests.py
23 changes: 12 additions & 11 deletions resources/lib/vrtplayer/vrtapihelper.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,17 +75,18 @@ def _get_season_items(self, api_url, api_json):
season_items = []
sort = 'label'
ascending = True
content = 'seasons'
episodes = api_json.get('results')
facets = api_json.get('facets', dict()).get('facets')
if episodes and facets:
try:
# Check if program has seasons
facet = next(f for f in facets if f.get('name') == 'seasons' and len(f.get('buckets', [])) > 1)
# Found multiple seasons, make list of seasons
season_items, sort, ascending = self._map_to_season_items(api_url, facet.get('buckets', []), episodes)
season_items, sort, ascending, content = self._map_to_season_items(api_url, facet.get('buckets', []), episodes)
except StopIteration:
pass
return season_items, sort, ascending
return season_items, sort, ascending, content

def get_episode_items(self, path=None, page=None, all_seasons=False):
import json
Expand All @@ -105,7 +106,7 @@ def get_episode_items(self, path=None, page=None, all_seasons=False):
api_url = self._VRTNU_SEARCH_URL + '?' + urlencode(params)
self._kodiwrapper.log_notice('URL get: ' + unquote(api_url), 'Verbose')
api_json = json.loads(urlopen(api_url).read())
episode_items, sort, ascending = self._map_to_episode_items(api_json.get('results', []), titletype='recent')
episode_items, sort, ascending, content = self._map_to_episode_items(api_json.get('results', []), titletype='recent')

if path:
if '.relevant/' in path:
Expand Down Expand Up @@ -135,17 +136,17 @@ def get_episode_items(self, path=None, page=None, all_seasons=False):
# path = requests.utils.unquote(path)
path = unquote(path)
if all_seasons is True:
episode_items, sort, ascending = self._map_to_episode_items(episodes, season_key=None)
episode_items, sort, ascending, content = self._map_to_episode_items(episodes, season_key=None)
elif 'facets[seasonTitle]' in path:
season_key = path.split('facets[seasonTitle]=')[1]
elif display_options.get('showSeason') is True:
episode_items, sort, ascending = self._get_season_items(api_url, api_json)
episode_items, sort, ascending, content = self._get_season_items(api_url, api_json)

# No season items, generate episode items
if not episode_items:
episode_items, sort, ascending = self._map_to_episode_items(episodes, season_key=season_key)
episode_items, sort, ascending, content = self._map_to_episode_items(episodes, season_key=season_key)

return episode_items, sort, ascending
return episode_items, sort, ascending, content

def _map_to_episode_items(self, episodes, titletype=None, season_key=None):
from datetime import datetime
Expand Down Expand Up @@ -227,7 +228,7 @@ def _map_to_episode_items(self, episodes, titletype=None, season_key=None):
art_dict=dict(thumb=thumb, icon='DefaultAddonVideo.png', fanart=fanart),
video_dict=metadata.get_video_dict(),
))
return episode_items, sort, ascending
return episode_items, sort, ascending, 'episodes'

def _map_to_season_items(self, api_url, seasons, episodes):
import random
Expand Down Expand Up @@ -288,7 +289,7 @@ def _map_to_season_items(self, api_url, seasons, episodes):
art_dict=dict(thumb=thumbnail, icon='DefaultSets.png', fanart=fanart),
video_dict=metadata.get_video_dict(),
))
return season_items, sort, ascending
return season_items, sort, ascending, 'seasons'

def search(self, search_string, page=1):
import json
Expand All @@ -304,8 +305,8 @@ def search(self, search_string, page=1):
api_json = json.loads(urlopen(api_url).read())

episodes = api_json.get('results', [{}])
episode_items, sort, ascending = self._map_to_episode_items(episodes, titletype='recent')
return episode_items, sort, ascending
episode_items, sort, ascending, content = self._map_to_episode_items(episodes, titletype='recent')
return episode_items, sort, ascending, content

def get_live_screenshot(self, channel):
url = '%s/%s.jpg' % (self._VRTNU_SCREENSHOT_URL, channel)
Expand Down
16 changes: 8 additions & 8 deletions resources/lib/vrtplayer/vrtplayer.py
Original file line number Diff line number Diff line change
Expand Up @@ -133,20 +133,20 @@ def show_channels(self, action=actions.PLAY, channels=None):
self._kodiwrapper.show_listing(channel_items, cache=False)

def show_episodes(self, path):
episode_items, sort, ascending = self._apihelper.get_episode_items(path=path)
self._kodiwrapper.show_listing(episode_items, sort=sort, ascending=ascending, content='episodes')
episode_items, sort, ascending, content = self._apihelper.get_episode_items(path=path)
self._kodiwrapper.show_listing(episode_items, sort=sort, ascending=ascending, content=content)

def show_all_episodes(self, path):
episode_items, sort, ascending = self._apihelper.get_episode_items(path=path, all_seasons=True)
self._kodiwrapper.show_listing(episode_items, sort=sort, ascending=ascending, content='episodes')
episode_items, sort, ascending, content = self._apihelper.get_episode_items(path=path, all_seasons=True)
self._kodiwrapper.show_listing(episode_items, sort=sort, ascending=ascending, content=content)

def show_recent(self, page):
try:
page = int(page)
except TypeError:
page = 1

episode_items, sort, ascending = self._apihelper.get_episode_items(page=page)
episode_items, sort, ascending, content = self._apihelper.get_episode_items(page=page)

# Add 'More...' entry at the end
episode_items.append(TitleItem(
Expand All @@ -157,7 +157,7 @@ def show_recent(self, page):
video_dict=dict(),
))

self._kodiwrapper.show_listing(episode_items, sort=sort, ascending=ascending, content='episodes', cache=False)
self._kodiwrapper.show_listing(episode_items, sort=sort, ascending=ascending, content=content, cache=False)

def play(self, params):
from resources.lib.vrtplayer import streamservice, tokenresolver
Expand All @@ -179,7 +179,7 @@ def search(self, search_string=None, page=1):
if not search_string:
return

search_items, sort, ascending = self._apihelper.search(search_string, page=page)
search_items, sort, ascending, content = self._apihelper.search(search_string, page=page)
if not search_items:
self._kodiwrapper.show_ok_dialog(self._kodiwrapper.get_localized_string(30098), self._kodiwrapper.get_localized_string(30099) % search_string)
return
Expand All @@ -194,7 +194,7 @@ def search(self, search_string=None, page=1):
video_dict=dict(),
))

self._kodiwrapper.show_listing(search_items, sort=sort, ascending=ascending, content='episodes', cache=False)
self._kodiwrapper.show_listing(search_items, sort=sort, ascending=ascending, content=content, cache=False)

def __get_category_menu_items(self):
try:
Expand Down
12 changes: 8 additions & 4 deletions test/apihelpertests.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,28 +26,32 @@ class ApiHelperTests(unittest.TestCase):
_apihelper = vrtapihelper.VRTApiHelper(_kodiwrapper)

def test_get_api_data_single_season(self):
title_items, sort, ascending = self._apihelper.get_episode_items(path='/vrtnu/a-z/het-journaal.relevant/')
title_items, sort, ascending, content = self._apihelper.get_episode_items(path='/vrtnu/a-z/het-journaal.relevant/')
self.assertTrue(123 < len(title_items) < 129, 'We got %s items instead.' % len(title_items))
self.assertEqual(sort, 'dateadded')
self.assertFalse(ascending)
self.assertEqual(content, 'episodes')

def test_get_api_data_multiple_seasons(self):
title_items, sort, ascending = self._apihelper.get_episode_items(path='/vrtnu/a-z/thuis.relevant/')
title_items, sort, ascending, content = self._apihelper.get_episode_items(path='/vrtnu/a-z/thuis.relevant/')
self.assertTrue(len(title_items) < 5)
self.assertEqual(sort, 'label')
self.assertFalse(ascending)
self.assertEqual(content, 'seasons')

def test_get_api_data_specific_season(self):
title_items, sort, ascending = self._apihelper.get_episode_items(path='/vrtnu/a-z/pano.relevant/')
title_items, sort, ascending, content = self._apihelper.get_episode_items(path='/vrtnu/a-z/pano.relevant/')
self.assertEqual(len(title_items), 4)
self.assertEqual(sort, 'label')
self.assertFalse(ascending)
self.assertEqual(content, 'seasons')

def test_get_api_data_specific_season_without_broadcastdate(self):
title_items, sort, ascending = self._apihelper.get_episode_items(path='/vrtnu/a-z/postbus-x.relevant/')
title_items, sort, ascending, content = self._apihelper.get_episode_items(path='/vrtnu/a-z/postbus-x.relevant/')
self.assertEqual(len(title_items), 3)
self.assertEqual(sort, 'label')
self.assertTrue(ascending)
self.assertEqual(content, 'seasons')


if __name__ == '__main__':
Expand Down
9 changes: 6 additions & 3 deletions test/searchtests.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,30 +28,33 @@ class TestSearch(unittest.TestCase):

def test_search_journaal(self):
''' Test for journaal '''
search_items, sort, ascending = self._apihelper.search('journaal', page=1)
search_items, sort, ascending, content = self._apihelper.search('journaal', page=1)

# Test we get a non-empty search result
self.assertEqual(len(search_items), 50)
self.assertEqual(sort, 'dateadded')
self.assertFalse(ascending)
self.assertEqual(content, 'episodes')

def test_search_journaal_page2(self):
''' Test for journaal '''
search_items, sort, ascending = self._apihelper.search('journaal', page=2)
search_items, sort, ascending, content = self._apihelper.search('journaal', page=2)

# Test we get a non-empty search result
self.assertEqual(len(search_items), 50)
self.assertEqual(sort, 'dateadded')
self.assertFalse(ascending)
self.assertEqual(content, 'episodes')

def test_search_weer(self):
''' Test for journaal '''
search_items, sort, ascending = self._apihelper.search('weer', page=1)
search_items, sort, ascending, content = self._apihelper.search('weer', page=1)

# Test we get a non-empty search result
self.assertEqual(len(search_items), 50)
self.assertEqual(sort, 'dateadded')
self.assertFalse(ascending)
self.assertEqual(content, 'episodes')


if __name__ == '__main__':
Expand Down
21 changes: 14 additions & 7 deletions test/vrtplayertests.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,58 +42,64 @@ def test_tvshows(self):

def test_show_videos_single_episode_shows_videos(self):
path = '/vrtnu/a-z/marathonradio.relevant/'
episode_items, sort, ascending = self._apihelper.get_episode_items(path=path)
episode_items, sort, ascending, content = self._apihelper.get_episode_items(path=path)
self.assertTrue(episode_items, msg=path)
self.assertEqual(sort, 'dateadded')
self.assertFalse(ascending)
self.assertEqual(content, 'episodes')

self._vrtplayer.show_episodes(path)
self.assertTrue(self._kodiwrapper.show_listing.called)

def test_show_videos_single_season_shows_videos(self):
path = '/vrtnu/a-z/het-weer.relevant/'
episode_items, sort, ascending = self._apihelper.get_episode_items(path=path)
episode_items, sort, ascending, content = self._apihelper.get_episode_items(path=path)
self.assertTrue(episode_items, msg=path)
self.assertEqual(sort, 'dateadded')
self.assertFalse(ascending)
self.assertEqual(content, 'episodes')

self._vrtplayer.show_episodes(path)
self.assertTrue(self._kodiwrapper.show_listing.called)

def test_show_videos_multiple_seasons_shows_videos(self):
path = '/vrtnu/a-z/pano.relevant/'
episode_items, sort, ascending = self._apihelper.get_episode_items(path=path)
episode_items, sort, ascending, content = self._apihelper.get_episode_items(path=path)
self.assertTrue(episode_items)
self.assertEqual(sort, 'label')
self.assertFalse(ascending)
self.assertEqual(content, 'seasons')

self._vrtplayer.show_episodes(path)
self.assertTrue(self._kodiwrapper.show_listing.called)

def test_show_videos_specific_seasons_shows_videos(self):
path = '/vrtnu/a-z/thuis.relevant/'
episode_items, sort, ascending = self._apihelper.get_episode_items(path=path)
episode_items, sort, ascending, content = self._apihelper.get_episode_items(path=path)
self.assertTrue(episode_items, msg=path)
self.assertEqual(sort, 'label')
self.assertFalse(ascending)
self.assertEqual(content, 'seasons')

self._vrtplayer.show_episodes(path)
self.assertTrue(self._kodiwrapper.show_listing.called)

def test_get_recent_episodes(self):
''' Test items, sort and order '''
episode_items, sort, ascending = self._apihelper.get_episode_items(page=1)
episode_items, sort, ascending, content = self._apihelper.get_episode_items(page=1)
self.assertEqual(len(episode_items), 50)
self.assertEqual(sort, 'dateadded')
self.assertFalse(ascending)
self.assertEqual(content, 'episodes')

def test_get_program_episodes(self):
''' Test items, sort and order '''
path = '/vrtnu/a-z/het-journaal.relevant/'
episode_items, sort, ascending = self._apihelper.get_episode_items(path=path)
episode_items, sort, ascending, content = self._apihelper.get_episode_items(path=path)
self.assertTrue(episode_items)
self.assertEqual(sort, 'dateadded')
self.assertFalse(ascending)
self.assertEqual(content, 'episodes')

def test_get_tvshows(self):
''' Test items, sort and order '''
Expand All @@ -117,8 +123,9 @@ def test_random_tvshow_episodes(self):
self.assertTrue(tvshow_items, msg=category['id'])

tvshow = random.choice(tvshow_items)
episode_items, sort, ascending = self._apihelper.get_episode_items(tvshow.url_dict['video_url'])
episode_items, sort, ascending, content = self._apihelper.get_episode_items(tvshow.url_dict['video_url'])
self.assertTrue(episode_items, msg=tvshow.url_dict['video_url'])
self.assertTrue(content in ['episodes', 'seasons'], "Content for '%s' is '%s'" % (tvshow.title, content))


if __name__ == '__main__':
Expand Down