def _process_browse_channels(provider, context, re_match): result = [] page_token = context.get_param('page_token', '') guide_id = context.get_param('guide_id', '') if guide_id: json_data = provider.get_client(context).get_guide_category(guide_id) result.extend(v3.response_to_items(provider, context, json_data)) pass else: json_data = provider.get_client(context).get_guide_categories() result.extend(v3.response_to_items(provider, context, json_data)) pass return result
def _process_browse_channels(provider, context, re_match): result = [] page_token = context.get_param('page_token', '') guide_id = context.get_param('guide_id', '') if guide_id: json_data = provider.get_client(context).get_guide_category(guide_id) result.extend(v3.response_to_items(provider, context, json_data)) pass else: json_data = provider.get_client(context).get_guide_categories() result.extend(v3.response_to_items(provider, context, json_data)) pass return result
def _load_videos(_page_token='', _progress_dialog=None): if not _progress_dialog: _progress_dialog = context.get_ui().create_progress_dialog( context.localize( provider.LOCAL_MAP['youtube.playlist.progress.updating']), context.localize(constants.localize.COMMON_PLEASE_WAIT), background=True) pass json_data = client.get_playlist_items(playlist_id, page_token=_page_token) if not v3.handle_error(provider, context, json_data): return False _progress_dialog.set_total( int(json_data.get('pageInfo', {}).get('totalResults', 0))) result = v3.response_to_items(provider, context, json_data, process_next_page=False) videos.extend(result) progress_text = '%s %d/%d' % (context.localize( constants.localize.COMMON_PLEASE_WAIT), len(videos), _progress_dialog.get_total()) _progress_dialog.update(steps=len(result), text=progress_text) next_page_token = json_data.get('nextPageToken', '') if next_page_token: _load_videos(_page_token=next_page_token, _progress_dialog=_progress_dialog) pass return _progress_dialog
def _process_recommendations(provider, context, re_match): result = [] page_token = context.get_param('page_token', '') json_data = provider.get_client(context).get_activities('home', page_token=page_token) if not v3.handle_error(provider, context, json_data): return False result.extend(v3.response_to_items(provider, context, json_data)) return result
def _process_disliked_videos(provider, context, re_match): result = [] page_token = context.get_param('page_token', '') json_data = provider.get_client(context).get_disliked_videos(page_token=page_token) if not v3.handle_error(provider, context, json_data): return False result.extend(v3.response_to_items(provider, context, json_data)) return result
def _process_list(provider, context, re_match): result = [] page_token = context.get_param('page_token', '') # no caching json_data = provider.get_client(context).get_subscription('mine', page_token=page_token) result.extend(v3.response_to_items(provider, context, json_data)) return result
def _process_disliked_videos(provider, context, re_match): result = [] page_token = context.get_param('page_token', '') json_data = provider.get_client(context).get_disliked_videos(page_token=page_token) if not v3.handle_error(provider, context, json_data): return False result.extend(v3.response_to_items(provider, context, json_data)) return result
def _process_recommendations(provider, context, re_match): result = [] page_token = context.get_param('page_token', '') json_data = provider.get_client(context).get_activities('home', page_token=page_token) if not v3.handle_error(provider, context, json_data): return False result.extend(v3.response_to_items(provider, context, json_data)) return result
def _process_list(provider, context, re_match): provider.set_content_type(context, kodion.constants.content_type.EPISODES) result = [] page_token = context.get_param('page_token', '') json_data = provider.get_client(context).get_activities(channel_id='home', page_token=page_token) result.extend(v3.response_to_items(provider, context, json_data)) return result
def _process_popular_right_now(provider, context, re_match): provider.set_content_type(context, kodion.constants.content_type.EPISODES) result = [] page_token = context.get_param('page_token', '') json_data = provider.get_client(context).get_popular_videos(page_token=page_token) result.extend(v3.response_to_items(provider, context, json_data)) return result
def _process_popular_right_now(provider, context, re_match): provider.set_content_type(context, kodion.constants.content_type.EPISODES) result = [] page_token = context.get_param('page_token', '') json_data = provider.get_client(context).get_popular_videos(page_token=page_token) result.extend(v3.response_to_items(provider, context, json_data)) return result
def _process_list(provider, context, re_match): result = [] page_token = context.get_param('page_token', '') # no caching json_data = provider.get_client(context).get_subscription( 'mine', page_token=page_token) result.extend(v3.response_to_items(provider, context, json_data)) return result
def _process_related_videos(provider, context, re_match): result = [] provider.set_content_type(context, kodion.constants.content_type.EPISODES) page_token = context.get_param('page_token', '') video_id = context.get_param('video_id', '') if video_id: json_data = provider.get_client(context).get_related_videos(video_id=video_id, page_token=page_token) result.extend(v3.response_to_items(provider, context, json_data, process_next_page=False)) pass return result
def _process_related_videos(provider, context, re_match): result = [] provider.set_content_type(context, kodion.constants.content_type.EPISODES) page_token = context.get_param('page_token', '') video_id = context.get_param('video_id', '') if video_id: json_data = provider.get_client(context).get_related_videos(video_id=video_id, page_token=page_token) result.extend(v3.response_to_items(provider, context, json_data, process_next_page=False)) pass return result
def _process_live_events(provider, context, re_match): def _sort(x): return x.get_aired() provider.set_content_type(context, kodion.constants.content_type.EPISODES) result = [] # TODO: cache result page_token = context.get_param('page_token', '') json_data = provider.get_client(context).get_live_events(event_type='live', page_token=page_token) if not v3.handle_error(provider, context, json_data): return False result.extend(v3.response_to_items(provider, context, json_data, sort=_sort, reverse_sort=True)) return result
def _process_live_events(provider, context, re_match): def _sort(x): return x.get_aired() provider.set_content_type(context, kodion.constants.content_type.EPISODES) result = [] # TODO: cache result page_token = context.get_param('page_token', '') json_data = provider.get_client(context).get_live_events(event_type='live', page_token=page_token) if not v3.handle_error(provider, context, json_data): return False result.extend(v3.response_to_items(provider, context, json_data, sort=_sort, reverse_sort=True)) return result
def _process_related_videos(provider, context, re_match): result = [] provider.set_content_type(context, kodion.constants.content_type.EPISODES) page_token = context.get_param('page_token', '') video_id = context.get_param('video_id', '') if video_id: json_data = provider.get_client(context).get_related_videos(video_id=video_id, page_token=page_token) # we remove the token for a next page, because the APIv3 is broken at this point if 'nextPageToken' in json_data: del json_data['nextPageToken'] pass result.extend(v3.response_to_items(provider, context, json_data)) pass return result
def _process_related_videos(provider, context, re_match): result = [] provider.set_content_type(context, kodion.constants.content_type.EPISODES) page_token = context.get_param('page_token', '') video_id = context.get_param('video_id', '') if video_id: json_data = provider.get_client(context).get_related_videos( video_id=video_id, page_token=page_token) # we remove the token for a next page, because the APIv3 is broken at this point if 'nextPageToken' in json_data: del json_data['nextPageToken'] pass result.extend(v3.response_to_items(provider, context, json_data)) pass return result
def _load_videos(_page_token='', _progress_dialog=None): if not _progress_dialog: _progress_dialog = context.get_ui().create_progress_dialog( context.localize(provider.LOCAL_MAP['youtube.playlist.progress.updating']), context.localize(constants.localize.COMMON_PLEASE_WAIT), background=True) pass json_data = client.get_playlist_items(playlist_id, page_token=_page_token) if not v3.handle_error(provider, context, json_data): return False _progress_dialog.set_total(int(json_data.get('pageInfo', {}).get('totalResults', 0))) result = v3.response_to_items(provider, context, json_data, process_next_page=False) videos.extend(result) progress_text = '%s %d/%d' % ( context.localize(constants.localize.COMMON_PLEASE_WAIT), len(videos), _progress_dialog.get_total()) _progress_dialog.update(steps=len(result), text=progress_text) next_page_token = json_data.get('nextPageToken', '') if next_page_token: _load_videos(_page_token=next_page_token, _progress_dialog=_progress_dialog) pass return _progress_dialog
def play_video(provider, context, re_match): try: video_id = context.get_param('video_id') client = provider.get_client(context) try: f = open(context._get_cache_path() + '/history.json', 'r') history = json.load(f) except: history = {} if not video_id in history: f = open(context._get_cache_path() + '/history.json', 'w') stamp = datetime.now().strftime('%s') history[video_id] = stamp json.dump(history, f) video_streams = client.get_video_streams(context, video_id) if len(video_streams) == 0: message = context.localize( provider.LOCAL_MAP['youtube.error.no_video_streams_found']) context.get_ui().show_notification(message, time_milliseconds=5000) return False video_stream = kodion.utils.select_stream(context, video_streams) if video_stream is None: return False if video_stream['video'].get('rtmpe', False): message = context.localize( provider.LOCAL_MAP['youtube.error.rtmpe_not_supported']) context.get_ui().show_notification(message, time_milliseconds=5000) return False video_item = VideoItem(video_id, video_stream['url']) if video_stream.get('meta', None): video_item.set_subtitles(video_stream['meta'].get( 'subtitles', None)) video_id_dict = {video_id: video_item} utils.update_video_infos(provider, context, video_id_dict) #get related video and set to queue videos = [] json_data = client.get_related_videos(video_id) if not v3.handle_error(provider, context, json_data): return False result = v3.response_to_items(provider, context, json_data, process_next_page=False) videos.extend(result) context.log_debug('video: "%s' % videos[0].get_uri()) playlist = context.get_video_playlist() for x in videos: r = re.compile("video_id=(.*)") m = r.search(x.get_uri()) vid = m.group(1) if vid not in history: playlist.add(x) break # Trigger post play events if provider.is_logged_in(): command = 'RunPlugin(%s)' % context.create_uri( ['events', 'post_play'], {'video_id': video_id}) context.execute(command) pass return video_item except YouTubeException, ex: message = ex.get_message() message = kodion.utils.strip_html_from_text(message) context.get_ui().show_notification(message, time_milliseconds=15000) pass