131 lines
5.1 KiB
Python
131 lines
5.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 ... import kodion
|
|
from ...youtube.helper import v3
|
|
|
|
|
|
def _process_rate_video(provider, context, re_match):
|
|
listitem_path = context.get_ui().get_info_label('Container.ListItem(0).FileNameAndPath')
|
|
ratings = ['like', 'dislike', 'none']
|
|
|
|
rating_param = context.get_param('rating', '')
|
|
if rating_param:
|
|
rating_param = rating_param.lower() if rating_param.lower() in ratings else ''
|
|
|
|
video_id = context.get_param('video_id', '')
|
|
if not video_id:
|
|
try:
|
|
video_id = re_match.group('video_id')
|
|
except IndexError:
|
|
if context.is_plugin_path(listitem_path, 'play'):
|
|
video_id = kodion.utils.find_video_id(listitem_path)
|
|
|
|
if not video_id:
|
|
raise kodion.KodionException('video/rate/: missing video_id')
|
|
|
|
try:
|
|
current_rating = re_match.group('rating')
|
|
except IndexError:
|
|
current_rating = None
|
|
|
|
if not current_rating:
|
|
client = provider.get_client(context)
|
|
json_data = client.get_video_rating(video_id)
|
|
if not v3.handle_error(provider, context, json_data):
|
|
return False
|
|
|
|
items = json_data.get('items', [])
|
|
if items:
|
|
current_rating = items[0].get('rating', '')
|
|
|
|
rating_items = []
|
|
if not rating_param:
|
|
for rating in ratings:
|
|
if rating != current_rating:
|
|
rating_items.append((context.localize(provider.LOCAL_MAP['youtube.video.rate.%s' % rating]), rating))
|
|
result = context.get_ui().on_select(context.localize(provider.LOCAL_MAP['youtube.video.rate']), rating_items)
|
|
else:
|
|
if rating_param != current_rating:
|
|
result = rating_param
|
|
else:
|
|
result = -1
|
|
|
|
if result != -1:
|
|
notify_message = ''
|
|
|
|
response = provider.get_client(context).rate_video(video_id, result)
|
|
|
|
if response.get('status_code') != 204:
|
|
notify_message = context.localize(provider.LOCAL_MAP['youtube.failed'])
|
|
|
|
elif response.get('status_code') == 204:
|
|
# this will be set if we are in the 'Liked Video' playlist
|
|
if context.get_param('refresh_container', '0') == '1':
|
|
context.get_ui().refresh_container()
|
|
|
|
if result == 'none':
|
|
notify_message = context.localize(provider.LOCAL_MAP['youtube.unrated.video'])
|
|
elif result == 'like':
|
|
notify_message = context.localize(provider.LOCAL_MAP['youtube.liked.video'])
|
|
elif result == 'dislike':
|
|
notify_message = context.localize(provider.LOCAL_MAP['youtube.disliked.video'])
|
|
|
|
if notify_message:
|
|
context.get_ui().show_notification(
|
|
message=notify_message,
|
|
time_milliseconds=2500,
|
|
audible=False
|
|
)
|
|
|
|
|
|
def _process_more_for_video(provider, context):
|
|
video_id = context.get_param('video_id', '')
|
|
if not video_id:
|
|
raise kodion.KodionException('video/more/: missing video_id')
|
|
|
|
items = []
|
|
|
|
is_logged_in = context.get_param('logged_in', '0')
|
|
if is_logged_in == '1':
|
|
# add video to a playlist
|
|
items.append((context.localize(provider.LOCAL_MAP['youtube.video.add_to_playlist']),
|
|
'RunPlugin(%s)' % context.create_uri(['playlist', 'select', 'playlist'], {'video_id': video_id})))
|
|
|
|
|
|
# default items
|
|
items.extend([(context.localize(provider.LOCAL_MAP['youtube.related_videos']),
|
|
'Container.Update(%s)' % context.create_uri(['special', 'related_videos'], {'video_id': video_id})),
|
|
(context.localize(provider.LOCAL_MAP['youtube.video.comments']),
|
|
'Container.Update(%s)' % context.create_uri(['special', 'parent_comments'], {'video_id': video_id})),
|
|
(context.localize(provider.LOCAL_MAP['youtube.video.description.links']),
|
|
'Container.Update(%s)' % context.create_uri(['special', 'description_links'],
|
|
{'video_id': video_id}))])
|
|
|
|
if is_logged_in == '1':
|
|
# rate a video
|
|
refresh_container = context.get_param('refresh_container', '0')
|
|
items.append((context.localize(provider.LOCAL_MAP['youtube.video.rate']),
|
|
'RunPlugin(%s)' % context.create_uri(['video', 'rate'], {'video_id': video_id,
|
|
'refresh_container': refresh_container})))
|
|
|
|
result = context.get_ui().on_select(context.localize(provider.LOCAL_MAP['youtube.video.more']), items)
|
|
if result != -1:
|
|
context.execute(result)
|
|
|
|
|
|
def process(method, provider, context, re_match):
|
|
if method == 'rate':
|
|
return _process_rate_video(provider, context, re_match)
|
|
elif method == 'more':
|
|
return _process_more_for_video(provider, context)
|
|
else:
|
|
raise kodion.KodionException("Unknown method '%s'" % method)
|