167 lines
6.1 KiB
Python
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
|