astrXbian/.install/.kodi/addons/plugin.video.youtube/resources/lib/youtube_plugin/youtube/helper/tv.py

167 lines
6.1 KiB
Python

# -*- coding: utf-8 -*-
"""
Copyright (C) 2014-2016 bromix (plugin.video.youtube)
Copyright (C) 2016-2018 plugin.video.youtube
SPDX-License-Identifier: GPL-2.0-only
See LICENSES/GPL-2.0-only for more information.
"""
from six import PY2
from ... import kodion
from ...youtube.helper import utils
from ...kodion.items.video_item import VideoItem
def my_subscriptions_to_items(provider, context, json_data, do_filter=False):
result = []
video_id_dict = {}
incognito = str(context.get_param('incognito', False)).lower() == 'true'
filter_list = []
black_list = False
if do_filter:
black_list = context.get_settings().get_bool('youtube.filter.my_subscriptions_filtered.blacklist', False)
filter_list = context.get_settings().get_string('youtube.filter.my_subscriptions_filtered.list', '')
filter_list = filter_list.replace(', ', ',')
filter_list = filter_list.split(',')
filter_list = [x.lower() for x in filter_list]
items = json_data.get('items', [])
for item in items:
channel = item['channel'].lower()
channel = channel.replace(',', '')
if PY2:
channel = channel.encode('utf-8', 'ignore')
if not do_filter or (do_filter and (not black_list) and (channel in filter_list)) or \
(do_filter and black_list and (channel not in filter_list)):
video_id = item['id']
item_params = {'video_id': video_id}
if incognito:
item_params.update({'incognito': incognito})
item_uri = context.create_uri(['play'], item_params)
video_item = VideoItem(item['title'], uri=item_uri)
if incognito:
video_item.set_play_count(0)
result.append(video_item)
video_id_dict[video_id] = video_item
use_play_data = not incognito and context.get_settings().use_playback_history()
channel_item_dict = {}
utils.update_video_infos(provider, context, video_id_dict, channel_items_dict=channel_item_dict, use_play_data=use_play_data)
utils.update_fanarts(provider, context, channel_item_dict)
# next page
next_page_token = json_data.get('next_page_token', '')
if next_page_token or json_data.get('continue', False):
new_params = {}
new_params.update(context.get_params())
new_params['next_page_token'] = next_page_token
new_params['offset'] = int(json_data.get('offset', 0))
new_context = context.clone(new_params=new_params)
current_page = int(new_context.get_param('page', 1))
next_page_item = kodion.items.NextPageItem(new_context, current_page, fanart=provider.get_fanart(new_context))
result.append(next_page_item)
return result
def tv_videos_to_items(provider, context, json_data):
result = []
video_id_dict = {}
incognito = str(context.get_param('incognito', False)).lower() == 'true'
items = json_data.get('items', [])
for item in items:
video_id = item['id']
item_params = {'video_id': video_id}
if incognito:
item_params.update({'incognito': incognito})
item_uri = context.create_uri(['play'], item_params)
video_item = VideoItem(item['title'], uri=item_uri)
if incognito:
video_item.set_play_count(0)
result.append(video_item)
video_id_dict[video_id] = video_item
use_play_data = not incognito and context.get_settings().use_playback_history()
channel_item_dict = {}
utils.update_video_infos(provider, context, video_id_dict, channel_items_dict=channel_item_dict, use_play_data=use_play_data)
utils.update_fanarts(provider, context, channel_item_dict)
# next page
next_page_token = json_data.get('next_page_token', '')
if next_page_token or json_data.get('continue', False):
new_params = {}
new_params.update(context.get_params())
new_params['next_page_token'] = next_page_token
new_params['offset'] = int(json_data.get('offset', 0))
new_context = context.clone(new_params=new_params)
current_page = int(new_context.get_param('page', 1))
next_page_item = kodion.items.NextPageItem(new_context, current_page, fanart=provider.get_fanart(new_context))
result.append(next_page_item)
return result
def saved_playlists_to_items(provider, context, json_data):
result = []
playlist_id_dict = {}
incognito = str(context.get_param('incognito', False)).lower() == 'true'
thumb_size = context.get_settings().use_thumbnail_size()
items = json_data.get('items', [])
for item in items:
title = item['title']
channel_id = item['channel_id']
playlist_id = item['id']
image = utils.get_thumbnail(thumb_size, item.get('thumbnails', {}))
item_params = {}
if incognito:
item_params.update({'incognito': incognito})
if channel_id:
item_uri = context.create_uri(['channel', channel_id, 'playlist', playlist_id], item_params)
else:
item_uri = context.create_uri(['playlist', playlist_id], item_params)
playlist_item = kodion.items.DirectoryItem(title, item_uri, image=image)
playlist_item.set_fanart(provider.get_fanart(context))
result.append(playlist_item)
playlist_id_dict[playlist_id] = playlist_item
channel_items_dict = {}
utils.update_playlist_infos(provider, context, playlist_id_dict, channel_items_dict)
utils.update_fanarts(provider, context, channel_items_dict)
# next page
next_page_token = json_data.get('next_page_token', '')
if next_page_token or json_data.get('continue', False):
new_params = {}
new_params.update(context.get_params())
new_params['next_page_token'] = next_page_token
new_params['offset'] = int(json_data.get('offset', 0))
new_context = context.clone(new_params=new_params)
current_page = int(new_context.get_param('page', 1))
next_page_item = kodion.items.NextPageItem(new_context, current_page, fanart=provider.get_fanart(new_context))
result.append(next_page_item)
return result