diff --git a/addon.xml b/addon.xml index 5a1e9d331..b80979acd 100644 --- a/addon.xml +++ b/addon.xml @@ -1,5 +1,5 @@ - + @@ -56,7 +56,7 @@ - [String.IsEqual(Window(10000).Property(EmbyRefresh),True) + !String.StartsWith(ListItem.FolderPath,"library://") + !String.StartsWith(ListItem.FolderPath,"addons://") + !String.StartsWith(ListItem.FolderPath,"plugin://") + !String.StartsWith(ListItem.FolderPath,"favourites:") + !String.IsEmpty(ListItem.Filename) + !String.IsEqual(ListItem.FileExtension,"m3u") + !String.StartsWith(ListItem.Path,"pvr://")] + [String.IsEqual(Window(10000).Property(EmbyRefresh),True) + !String.StartsWith(ListItem.FolderPath,"addons://") + !String.StartsWith(ListItem.FolderPath,"plugin://") + !String.StartsWith(ListItem.FolderPath,"favourites:") + !String.IsEqual(ListItem.FileExtension,"m3u") + !String.StartsWith(ListItem.Path,"pvr://")] + [!String.IsEmpty(ListItem.Filename) | [String.IsEqual(ListItem.DBTYPE,"tvshow") | String.IsEqual(ListItem.DBTYPE,"season")]] diff --git a/core/musicalbum.py b/core/musicalbum.py index b98409b54..dabb2b07f 100644 --- a/core/musicalbum.py +++ b/core/musicalbum.py @@ -31,7 +31,7 @@ def change(self, Item): # Detect compilations Compilation = 0 - if Item['AlbumArtist'].lower() in ("various artists", "various", "various items", "sountrack", "xvarious artistsx"): + if Item['AlbumArtist'].lower() in ("various artists", "various", "various items", "soundtrack", "xvarious artistsx"): Compilation = 1 xbmc.log(f"EMBY.core.musicalbum: Compilation detected: {Item['Name']}", 0) # LOGDEBUG diff --git a/database/library.py b/database/library.py index f96864528..2fdbec388 100644 --- a/database/library.py +++ b/database/library.py @@ -263,7 +263,7 @@ def KodiStartSync(self, Firstrun): # Threaded by caller -> emby.py if UpdateData: UpdateSyncData = True - self.updated(UpdateData, True) + self.updated(UpdateData, False) # Update sync update timestamp if UpdateSyncData: diff --git a/emby/listitem.py b/emby/listitem.py index f0425e320..90278fc99 100644 --- a/emby/listitem.py +++ b/emby/listitem.py @@ -149,10 +149,17 @@ def set_ListItem_from_Kodi_database(KodiItem, Path=None): return IsFolder, ListItem def set_ListItem(item, ServerId, Path=None, KodiId=None): + if 'Name' in item: + Name = item['Name'] + elif 'SeriesName' in item: # {'ServerId': '2a38697ffc1b428b943aa1b6014e2263', 'PremiereDate': '2024-10-23T22:00:00.0000000Z', 'ProductionYear': 2024, 'IndexNumber': 2, 'ParentIndexNumber': 5, 'ProviderIds': {}, 'Type': 'Episode', 'SeriesName': 'Star Trek: Lower Decks', 'SeriesId': '58574', 'SeriesPrimaryImageTag': 'fb201a2139810a15d125dfea5e981f36', 'ParentThumbItemId': '58574', 'ParentThumbImageTag': '01e69ca501869a469606bc82bd94d300', 'LocationType': 'Virtual'} + Name = item['SeriesName'] + else: + Name = "Unknown" + if Path: - listitem = xbmcgui.ListItem(label=item['Name'], offscreen=True, path=Path) + listitem = xbmcgui.ListItem(label=Name, offscreen=True, path=Path) else: - listitem = xbmcgui.ListItem(label=item['Name'], offscreen=True) + listitem = xbmcgui.ListItem(label=Name, offscreen=True) listitem.setContentLookup(False) Properties = {} @@ -170,7 +177,7 @@ def set_ListItem(item, ServerId, Path=None, KodiId=None): IsVideo = True HasStreams = True InfoTags.setMediaType("video") - InfoTags.setTitle(item['Name']) + InfoTags.setTitle(Name) set_SortTitle(item, InfoTags) InfoTags.setPlot(item['CurrentProgram']['Overview']) set_DateAdded(item, InfoTags) @@ -197,7 +204,7 @@ def set_ListItem(item, ServerId, Path=None, KodiId=None): IsVideo = True HasStreams = True InfoTags.setMediaType("movie") - InfoTags.setTitle(item['Name']) + InfoTags.setTitle(Name) set_SortTitle(item, InfoTags) set_OriginalTitle(item, InfoTags) set_Plot(item, InfoTags) @@ -232,14 +239,14 @@ def set_ListItem(item, ServerId, Path=None, KodiId=None): Properties = {'embyserverid': str(ServerId), 'embyid': str(item['Id']), 'IsFolder': 'false', 'IsPlayable': 'true', "KodiType": "movie"} elif item['Type'] == "Series": - item['SeriesName'] = item['Name'] + item['SeriesName'] = Name common.set_RunTimeTicks(item) common.set_trailer(item, utils.EmbyServers[ServerId]) common.set_common(item, ServerId, True) InfoTags = listitem.getVideoInfoTag() IsVideo = True InfoTags.setMediaType("tvshow") - InfoTags.setTitle(item['Name']) + InfoTags.setTitle(Name) set_SortTitle(item, InfoTags) set_OriginalTitle(item, InfoTags) set_Plot(item, InfoTags) @@ -275,7 +282,7 @@ def set_ListItem(item, ServerId, Path=None, KodiId=None): InfoTags = listitem.getVideoInfoTag() IsVideo = True InfoTags.setMediaType("season") - InfoTags.setTitle(item['Name']) + InfoTags.setTitle(Name) set_SortTitle(item, InfoTags) set_OriginalTitle(item, InfoTags) set_Plot(item, InfoTags) @@ -312,7 +319,7 @@ def set_ListItem(item, ServerId, Path=None, KodiId=None): IsVideo = True HasStreams = True InfoTags.setMediaType("episode") - InfoTags.setTitle(item['Name']) + InfoTags.setTitle(Name) set_SortTitle(item, InfoTags) set_OriginalTitle(item, InfoTags) set_Plot(item, InfoTags) @@ -367,7 +374,7 @@ def set_ListItem(item, ServerId, Path=None, KodiId=None): if item['IndexNumber']: InfoTags.setTrackNumber(int(item['IndexNumber'])) - InfoTags.setTitle(item['Name']) + InfoTags.setTitle(Name) set_Album(item, InfoTags) set_SortTitle(item, InfoTags) set_OriginalTitle(item, InfoTags) @@ -404,7 +411,7 @@ def set_ListItem(item, ServerId, Path=None, KodiId=None): IsVideo = True HasStreams = True InfoTags.setMediaType("video") - InfoTags.setTitle(item['Name']) + InfoTags.setTitle(Name) set_SortTitle(item, InfoTags) set_OriginalTitle(item, InfoTags) set_Plot(item, InfoTags) @@ -432,8 +439,8 @@ def set_ListItem(item, ServerId, Path=None, KodiId=None): common.set_common(item, ServerId, True) InfoTags = listitem.getMusicInfoTag() InfoTags.setMediaType("artist") - InfoTags.setTitle(item['Name']) - InfoTags.setArtist(item['Name']) + InfoTags.setTitle(Name) + InfoTags.setArtist(Name) set_Genres(item, InfoTags) InfoTags.setDbId(1000000000 + int(item['Id']), "artist") set_MusicBrainzArtistID(item, InfoTags) @@ -445,8 +452,8 @@ def set_ListItem(item, ServerId, Path=None, KodiId=None): common.set_RunTimeTicks(item) InfoTags = listitem.getMusicInfoTag() InfoTags.setMediaType("album") - InfoTags.setTitle(item['Name']) - InfoTags.setAlbum(item['Name']) + InfoTags.setTitle(Name) + InfoTags.setAlbum(Name) set_Album(item, InfoTags) set_AlbumArtist(item, InfoTags) set_Year(item, InfoTags) @@ -467,7 +474,7 @@ def set_ListItem(item, ServerId, Path=None, KodiId=None): set_Album(item, InfoTags) set_AlbumArtist(item, InfoTags) InfoTags.setMediaType("song") - InfoTags.setTitle(item['Name']) + InfoTags.setTitle(Name) set_Year(item, InfoTags) set_Duration(item, InfoTags) set_LastPlayed(item, InfoTags) @@ -487,7 +494,7 @@ def set_ListItem(item, ServerId, Path=None, KodiId=None): InfoTags = listitem.getVideoInfoTag() IsVideo = True InfoTags.setMediaType("set") - InfoTags.setTitle(item['Name']) + InfoTags.setTitle(Name) set_SortTitle(item, InfoTags) set_OriginalTitle(item, InfoTags) set_Plot(item, InfoTags) @@ -515,7 +522,7 @@ def set_ListItem(item, ServerId, Path=None, KodiId=None): Properties = {'embyserverid': str(ServerId), 'embyid': str(item['Id']), 'IsFolder': 'true', 'IsPlayable': 'true'} elif item['Type'] == 'Playlist': InfoTags = listitem.getVideoInfoTag() - InfoTags.setTitle(item['Name']) + InfoTags.setTitle(Name) common.set_KodiArtwork(item, ServerId, True) common.set_overview(item) Properties = {'embyserverid': str(ServerId), 'embyid': str(item['Id']), 'IsFolder': 'true', 'IsPlayable': 'false'} @@ -539,7 +546,7 @@ def set_ListItem(item, ServerId, Path=None, KodiId=None): Properties = {'embyserverid': str(ServerId), 'embyid': str(item['Id']), 'IsFolder': 'true', 'IsPlayable': 'true'} else: # Letter, Tag, Genre, MusicGenre, etc InfoTags = listitem.getVideoInfoTag() - InfoTags.setTitle(item['Name']) + InfoTags.setTitle(Name) common.set_KodiArtwork(item, ServerId, True) if HasStreams: diff --git a/helper/pluginmenu.py b/helper/pluginmenu.py index 5a4245dfb..a18107435 100644 --- a/helper/pluginmenu.py +++ b/helper/pluginmenu.py @@ -144,8 +144,17 @@ def browse(Handle, Id, query, ParentId, Content, ServerId, LibraryId, ContentSup Extras.update({"SortBy": "DatePlayed"}) EmbyContentQuery = (ParentId, [Content], True, Extras, True, LibraryId) elif query == 'Recommendations': + Doubles = [] + for Item in utils.EmbyServers[ServerId].API.get_recommendations(ParentId): + if Item['Name'] not in Doubles: + Doubles.append(Item['Name']) + else: + continue + ItemsListings = load_ListItem(ParentId, Item, ServerId, ItemsListings, Content, LibraryId) + + del Doubles elif query == 'BoxSet': ParentId = Id diff --git a/hooks/monitor.py b/hooks/monitor.py index e144787bf..a14da9d07 100644 --- a/hooks/monitor.py +++ b/hooks/monitor.py @@ -165,6 +165,7 @@ def monitor_EventQueue(): # Threaded / queued elif Event[0] == "managelibsselection": start_new_thread(pluginmenu.select_managelibs, ()) elif Event[0] == "opensettings": + xbmc.executebuiltin('Dialog.Close(all,true)') xbmc.executebuiltin('Addon.OpenSettings(plugin.service.emby-next-gen)') elif Event[0] == "backup": start_new_thread(Backup, ())