From 4377cc3db2a92be24df0e92a95562d5a61b312c3 Mon Sep 17 00:00:00 2001 From: MoojMidge <56883549+MoojMidge@users.noreply.github.com> Date: Sun, 25 Aug 2024 15:52:31 +1000 Subject: [PATCH] Additional fixes and compatibility shims for playing AudioItems #873 --- .../youtube_plugin/kodion/items/media_item.py | 6 ++--- .../kodion/items/xbmc/xbmc_items.py | 25 +++++++++++++------ .../youtube_plugin/youtube/helper/utils.py | 6 +++-- 3 files changed, 25 insertions(+), 12 deletions(-) diff --git a/resources/lib/youtube_plugin/kodion/items/media_item.py b/resources/lib/youtube_plugin/kodion/items/media_item.py index ac0efeedd..4118e59e1 100644 --- a/resources/lib/youtube_plugin/kodion/items/media_item.py +++ b/resources/lib/youtube_plugin/kodion/items/media_item.py @@ -220,7 +220,7 @@ def set_mediatype(self, mediatype): self._mediatype = self._DEFAULT_MEDIATYPE def get_mediatype(self): - return self._mediatype + return self._mediatype or self._DEFAULT_MEDIATYPE def set_plot(self, plot): try: @@ -381,7 +381,7 @@ def playlist_item_id(self, value): class AudioItem(MediaItem): - _ALLOWABLE_MEDIATYPES = {'song', 'album', 'artist'} + _ALLOWABLE_MEDIATYPES = {CONTENT.AUDIO_TYPE, 'song', 'album', 'artist'} _DEFAULT_MEDIATYPE = CONTENT.AUDIO_TYPE def __init__(self, name, uri, image='DefaultAudio.png', fanart=None): @@ -396,7 +396,7 @@ def get_album_name(self): class VideoItem(MediaItem): - _ALLOWABLE_MEDIATYPES = {'video', + _ALLOWABLE_MEDIATYPES = {CONTENT.VIDEO_TYPE, 'movie', 'tvshow', 'season', 'episode', 'musicvideo'} diff --git a/resources/lib/youtube_plugin/kodion/items/xbmc/xbmc_items.py b/resources/lib/youtube_plugin/kodion/items/xbmc/xbmc_items.py index 2f0b89e0b..f7396f929 100644 --- a/resources/lib/youtube_plugin/kodion/items/xbmc/xbmc_items.py +++ b/resources/lib/youtube_plugin/kodion/items/xbmc/xbmc_items.py @@ -321,12 +321,20 @@ def set_info(list_item, item, properties, set_play_count=True, resume=True): resume_time = resume and item.get_start_time() duration = item.get_duration() - if resume_time and duration: - info_tag.setResumePoint(resume_time, float(duration)) - elif resume_time: - info_tag.setResumePoint(resume_time) - if info_type == 'video' and duration: - info_tag.addVideoStream(xbmc.VideoStreamDetail(duration=duration)) + if info_type == 'video': + if resume_time and duration: + info_tag.setResumePoint(resume_time, float(duration)) + elif resume_time: + info_tag.setResumePoint(resume_time) + if duration: + info_tag.addVideoStream(xbmc.VideoStreamDetail(duration=duration)) + elif info_type == 'music': + # These properties are deprecated but there is no other way to set these + # details for a ListItem with a MusicInfoTag + if resume_time: + properties['ResumeTime'] = str(resume_time) + if duration: + properties['TotalTime'] = str(duration) # duration: int # As seconds @@ -346,7 +354,10 @@ def set_info(list_item, item, properties, set_play_count=True, resume=True): value = item.get_play_count() if value is not None: if set_play_count: - info_tag.setPlaycount(value) + if info_type == 'video': + info_tag.setPlaycount(value) + elif info_type == 'music': + info_tag.setPlayCount(value) properties[PLAY_COUNT] = value # count: int diff --git a/resources/lib/youtube_plugin/youtube/helper/utils.py b/resources/lib/youtube_plugin/youtube/helper/utils.py index 178dcee16..b492a07de 100644 --- a/resources/lib/youtube_plugin/youtube/helper/utils.py +++ b/resources/lib/youtube_plugin/youtube/helper/utils.py @@ -15,7 +15,7 @@ from math import log10 from ...kodion.constants import CONTENT, LICENSE_TOKEN, LICENSE_URL, PATHS -from ...kodion.items import DirectoryItem, menu_items +from ...kodion.items import AudioItem, DirectoryItem, menu_items from ...kodion.utils import ( datetime_parser, friendly_number, @@ -431,7 +431,9 @@ def update_video_infos(provider, context, video_id_dict, media_item = video_id_dict[video_id] media_item.set_mediatype( - CONTENT.AUDIO_TYPE if audio_only else CONTENT.VIDEO_TYPE + CONTENT.AUDIO_TYPE + if audio_only or isinstance(media_item, AudioItem) else + CONTENT.VIDEO_TYPE ) play_data = use_play_data and yt_item.get('play_data')