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

96 lines
2.8 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 ...kodion.items import UriItem
from ... import kodion
from ...youtube.helper import v3
def _process_list(provider, context):
result = []
page_token = context.get_param('page_token', '')
# no caching
json_data = provider.get_client(context).get_subscription('mine', page_token=page_token)
if not v3.handle_error(provider, context, json_data):
return []
result.extend(v3.response_to_items(provider, context, json_data))
return result
def _process_add(provider, context):
listitem_subscription_id = context.get_ui().get_info_label('Container.ListItem(0).Property(subscription_id)')
subscription_id = context.get_param('subscription_id', '')
if not subscription_id:
if listitem_subscription_id and listitem_subscription_id.lower().startswith('uc'):
subscription_id = listitem_subscription_id
if subscription_id:
json_data = provider.get_client(context).subscribe(subscription_id)
if not v3.handle_error(provider, context, json_data):
return False
context.get_ui().show_notification(
context.localize(provider.LOCAL_MAP['youtube.subscribed.to.channel']),
time_milliseconds=2500,
audible=False
)
return True
return False
def _process_remove(provider, context):
listitem_subscription_id = context.get_ui().get_info_label('Container.ListItem(0).Property(channel_subscription_id)')
subscription_id = context.get_param('subscription_id', '')
if not subscription_id and listitem_subscription_id:
subscription_id = listitem_subscription_id
if subscription_id:
json_data = provider.get_client(context).unsubscribe(subscription_id)
if not v3.handle_error(provider, context, json_data):
return False
context.get_ui().refresh_container()
context.get_ui().show_notification(
context.localize(provider.LOCAL_MAP['youtube.unsubscribed.from.channel']),
time_milliseconds=2500,
audible=False
)
return True
return False
def process(method, provider, context):
result = []
# we need a login
_ = provider.get_client(context)
if not provider.is_logged_in():
return UriItem(context.create_uri(['sign', 'in']))
if method == 'list':
result.extend(_process_list(provider, context))
elif method == 'add':
return _process_add(provider, context)
elif method == 'remove':
return _process_remove(provider, context)
else:
raise kodion.KodionException("Unknown subscriptions method '%s'" % method)
return result