diff --git a/.gitignore b/.gitignore index 959fc2ad..c0132b4d 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ machine_guid /resources/media/Thumbs.db .idea/ +.DS_Store diff --git a/addon.xml b/addon.xml index d355868e..c5f9cded 100644 --- a/addon.xml +++ b/addon.xml @@ -1,13 +1,10 @@ - - - - @@ -31,18 +28,13 @@ all en GNU GENERAL PUBLIC LICENSE. Version 2, June 1991 - http://emby.media/community/index.php?/forum/99-kodi/ - http://emby.media/ - https://github.com/MediaBrowser/plugin.video.emby + https://forum.jellyfin.org + https://jellyfin.media/ + https://github.com/jellyfin/jellyfin-kodi - Welcome to Emby for Kodi A whole new way to manage and view your media library. The Emby addon for Kodi combines the best of Kodi - ultra smooth navigation, beautiful UIs and playback of any file under the sun, and Emby - the most powerful fully open source multi-client media metadata indexer and server. Emby for Kodi is the absolute best way to enjoy the incredible Kodi playback engine combined with the power of Emby's centralized database. Features: Direct integration with the Kodi library for native Kodi speed Instant synchronization with the Emby server Full support for Movie, TV and Music collections Emby Server direct stream and transcoding support - use Kodi when you are away from home! + Welcome to Jellyfin for Kodi A whole new way to manage and view your media library. The Jellyfin addon for Kodi combines the best of Kodi - ultra smooth navigation, beautiful UIs and playback of any file under the sun, and Jellyfin - the most powerful fully open source multi-client media metadata indexer and server. Jellyfin for Kodi is the absolute best way to enjoy the incredible Kodi playback engine combined with the power of Jellyfin's centralized database. Features: Direct integration with the Kodi library for native Kodi speed Instant synchronization with the Jellyfin server Full support for Movie, TV and Music collections Jellyfin Server direct stream and transcoding support - use Kodi when you are away from home! - New stable release - The wiki has been updated, PLEASE READ: https://github.com/MediaBrowser/plugin.video.emby/wiki - Fix playback for Kodi Leia - Fix masterlock - Home videos and pictures now show under videos and picture add-ons - Dependencies were updated to 0.14! + Rebrand in progress diff --git a/context.py b/context.py index 3a89a817..fdec02ad 100644 --- a/context.py +++ b/context.py @@ -11,7 +11,7 @@ import xbmcaddon ################################################################################################# -__addon__ = xbmcaddon.Addon(id='plugin.video.emby') +__addon__ = xbmcaddon.Addon(id='plugin.video.jellyfin') __base__ = xbmc.translatePath(os.path.join(__addon__.getAddonInfo('path'), 'resources', 'lib')).decode('utf-8') __libraries__ = xbmc.translatePath(os.path.join(__addon__.getAddonInfo('path'), 'libraries')).decode('utf-8') __pcache__ = xbmc.translatePath(os.path.join(__addon__.getAddonInfo('profile'), 'emby')).decode('utf-8') diff --git a/context_play.py b/context_play.py index 58ee93fb..6ed686cc 100644 --- a/context_play.py +++ b/context_play.py @@ -11,7 +11,7 @@ import xbmcaddon ################################################################################################# -__addon__ = xbmcaddon.Addon(id='plugin.video.emby') +__addon__ = xbmcaddon.Addon(id='plugin.video.jellyfin') __base__ = xbmc.translatePath(os.path.join(__addon__.getAddonInfo('path'), 'resources', 'lib')).decode('utf-8') __libraries__ = xbmc.translatePath(os.path.join(__addon__.getAddonInfo('path'), 'libraries')).decode('utf-8') __pcache__ = xbmc.translatePath(os.path.join(__addon__.getAddonInfo('profile'), 'emby')).decode('utf-8') diff --git a/default.py b/default.py index 6f1b05a0..8092bb94 100644 --- a/default.py +++ b/default.py @@ -11,7 +11,7 @@ import xbmcaddon ################################################################################################# -__addon__ = xbmcaddon.Addon(id='plugin.video.emby') +__addon__ = xbmcaddon.Addon(id='plugin.video.jellyfin') __base__ = xbmc.translatePath(os.path.join(__addon__.getAddonInfo('path'), 'resources', 'lib')).decode('utf-8') __libraries__ = xbmc.translatePath(os.path.join(__addon__.getAddonInfo('path'), 'libraries')).decode('utf-8') __pcache__ = xbmc.translatePath(os.path.join(__addon__.getAddonInfo('profile'), 'emby')).decode('utf-8') diff --git a/icon.png b/icon.png index cb7c85ca..6360cfab 100644 Binary files a/icon.png and b/icon.png differ diff --git a/resources/language/resource.language.de_de/strings.po b/resources/language/resource.language.de_de/strings.po index 34c9eb7c..ed1a7a15 100644 --- a/resources/language/resource.language.de_de/strings.po +++ b/resources/language/resource.language.de_de/strings.po @@ -1,6 +1,6 @@ # Emby for Kodi language file # Addon Name: Emby for Kodi -# Addon id: plugin.video.emby +# Addon id: plugin.video.jellyfin # Addon Provider: angelblue05 # Translators: # Wolfgang Petri , 2018 diff --git a/resources/language/resource.language.en_gb/strings.po b/resources/language/resource.language.en_gb/strings.po index 897396a3..d0408eb8 100644 --- a/resources/language/resource.language.en_gb/strings.po +++ b/resources/language/resource.language.en_gb/strings.po @@ -1,6 +1,6 @@ # Emby for Kodi language file # Addon Name: Emby for Kodi -# Addon id: plugin.video.emby +# Addon id: plugin.video.jellyfin # Addon Provider: angelblue05 msgid "" msgstr "" diff --git a/resources/language/resource.language.fr_fr/strings.po b/resources/language/resource.language.fr_fr/strings.po index 356133c1..03a1a716 100644 --- a/resources/language/resource.language.fr_fr/strings.po +++ b/resources/language/resource.language.fr_fr/strings.po @@ -1,6 +1,6 @@ # Emby for Kodi language file # Addon Name: Emby for Kodi -# Addon id: plugin.video.emby +# Addon id: plugin.video.jellyfin # Addon Provider: angelblue05 # Translators: # Jean Fontaine , 2018 diff --git a/resources/language/resource.language.it_it/strings.po b/resources/language/resource.language.it_it/strings.po index e94cf631..b4e2d650 100644 --- a/resources/language/resource.language.it_it/strings.po +++ b/resources/language/resource.language.it_it/strings.po @@ -1,6 +1,6 @@ # Emby for Kodi language file # Addon Name: Emby for Kodi -# Addon id: plugin.video.emby +# Addon id: plugin.video.jellyfin # Addon Provider: angelblue05 # Translators: # EffeF, 2019 diff --git a/resources/language/resource.language.nl_nl/strings.po b/resources/language/resource.language.nl_nl/strings.po index 724b877c..732a7d13 100644 --- a/resources/language/resource.language.nl_nl/strings.po +++ b/resources/language/resource.language.nl_nl/strings.po @@ -1,6 +1,6 @@ # Emby for Kodi language file # Addon Name: Emby for Kodi -# Addon id: plugin.video.emby +# Addon id: plugin.video.jellyfin # Addon Provider: angelblue05 # Translators: # 63ac71fcbd0581bb567b1f0d798c7970, 2019 diff --git a/resources/language/resource.language.pl_pl/strings.po b/resources/language/resource.language.pl_pl/strings.po index 7877ad59..8170e3e2 100644 --- a/resources/language/resource.language.pl_pl/strings.po +++ b/resources/language/resource.language.pl_pl/strings.po @@ -1,6 +1,6 @@ # Emby for Kodi language file # Addon Name: Emby for Kodi -# Addon id: plugin.video.emby +# Addon id: plugin.video.jellyfin # Addon Provider: angelblue05 # Translators: # MichaƂ Sawicz , 2019 diff --git a/resources/lib/client.py b/resources/lib/client.py index 8f523448..6c2b1a15 100644 --- a/resources/lib/client.py +++ b/resources/lib/client.py @@ -82,7 +82,7 @@ def get_device_id(reset=False): if client_id: return client_id - directory = xbmc.translatePath('special://profile/addon_data/plugin.video.emby/').decode('utf-8') + directory = xbmc.translatePath('special://profile/addon_data/plugin.video.jellyfin/').decode('utf-8') if not xbmcvfs.exists(directory): xbmcvfs.mkdir(directory) diff --git a/resources/lib/database/__init__.py b/resources/lib/database/__init__.py index 6ed45e6a..b6161cb8 100644 --- a/resources/lib/database/__init__.py +++ b/resources/lib/database/__init__.py @@ -238,7 +238,7 @@ def reset(): if dialog("yesno", heading="{emby}", line1=_(33086)): reset_artwork() - addon_data = xbmc.translatePath("special://profile/addon_data/plugin.video.emby/").decode('utf-8') + addon_data = xbmc.translatePath("special://profile/addon_data/plugin.video.jellyfin/").decode('utf-8') if dialog("yesno", heading="{emby}", line1=_(33087)): @@ -326,7 +326,7 @@ def reset_artwork(): def get_sync(): - path = xbmc.translatePath("special://profile/addon_data/plugin.video.emby/").decode('utf-8') + path = xbmc.translatePath("special://profile/addon_data/plugin.video.jellyfin/").decode('utf-8') if not xbmcvfs.exists(path): xbmcvfs.mkdirs(path) @@ -346,7 +346,7 @@ def get_sync(): def save_sync(sync): - path = xbmc.translatePath("special://profile/addon_data/plugin.video.emby/").decode('utf-8') + path = xbmc.translatePath("special://profile/addon_data/plugin.video.jellyfin/").decode('utf-8') if not xbmcvfs.exists(path): xbmcvfs.mkdirs(path) @@ -358,7 +358,7 @@ def save_sync(sync): def get_credentials(): - path = xbmc.translatePath("special://profile/addon_data/plugin.video.emby/").decode('utf-8') + path = xbmc.translatePath("special://profile/addon_data/plugin.video.jellyfin/").decode('utf-8') if not xbmcvfs.exists(path): xbmcvfs.mkdirs(path) @@ -384,7 +384,7 @@ def get_credentials(): def save_credentials(credentials): credentials = credentials or {} - path = xbmc.translatePath("special://profile/addon_data/plugin.video.emby/").decode('utf-8') + path = xbmc.translatePath("special://profile/addon_data/plugin.video.jellyfin/").decode('utf-8') if not xbmcvfs.exists(path): xbmcvfs.mkdirs(path) diff --git a/resources/lib/downloader.py b/resources/lib/downloader.py index 43c43d1c..6cc5c35c 100644 --- a/resources/lib/downloader.py +++ b/resources/lib/downloader.py @@ -24,7 +24,7 @@ from emby.core.exceptions import HTTPException LOG = logging.getLogger("EMBY."+__name__) LIMIT = min(int(settings('limitIndex') or 50), 50) -CACHE = xbmc.translatePath(os.path.join(xbmcaddon.Addon(id='plugin.video.emby').getAddonInfo('profile').decode('utf-8'), 'emby')).decode('utf-8') +CACHE = xbmc.translatePath(os.path.join(xbmcaddon.Addon(id='plugin.video.jellyfin').getAddonInfo('profile').decode('utf-8'), 'emby')).decode('utf-8') ################################################################################################# diff --git a/resources/lib/emby/core/connection_manager.py b/resources/lib/emby/core/connection_manager.py index 62b3dce3..85e9ff4a 100644 --- a/resources/lib/emby/core/connection_manager.py +++ b/resources/lib/emby/core/connection_manager.py @@ -43,7 +43,7 @@ def get_server_address(server, mode): class ConnectionManager(object): - min_server_version = "3.0.5930" + min_server_version = "10.1.0" server_version = min_server_version user = {} server_id = None diff --git a/resources/lib/entrypoint/context.py b/resources/lib/entrypoint/context.py index d5078eed..f45bb06c 100644 --- a/resources/lib/entrypoint/context.py +++ b/resources/lib/entrypoint/context.py @@ -18,7 +18,7 @@ from objects import Actions ################################################################################################# LOG = logging.getLogger("EMBY."+__name__) -XML_PATH = (xbmcaddon.Addon('plugin.video.emby').getAddonInfo('path'), "default", "1080i") +XML_PATH = (xbmcaddon.Addon('plugin.video.jellyfin').getAddonInfo('path'), "default", "1080i") OPTIONS = { 'Refresh': _(30410), 'Delete': _(30409), @@ -153,7 +153,7 @@ class Context(object): TheVoid('FavoriteItem', {'ServerId': self.server, 'Id': self.item['Id'], 'Favorite': False}) elif selected == OPTIONS['Addon']: - xbmc.executebuiltin('Addon.OpenSettings(plugin.video.emby)') + xbmc.executebuiltin('Addon.OpenSettings(plugin.video.jellyfin)') elif selected == OPTIONS['Delete']: self.delete_item() diff --git a/resources/lib/entrypoint/default.py b/resources/lib/entrypoint/default.py index 3c46a911..43d43e84 100644 --- a/resources/lib/entrypoint/default.py +++ b/resources/lib/entrypoint/default.py @@ -109,7 +109,7 @@ class Events(object): elif mode == 'removeserver': event('RemoveServer', {'Id': server}) elif mode == 'settings': - xbmc.executebuiltin('Addon.OpenSettings(plugin.video.emby)') + xbmc.executebuiltin('Addon.OpenSettings(plugin.video.jellyfin)') elif mode == 'adduser': add_user() elif mode == 'checkupdate': @@ -153,13 +153,13 @@ def listing(): if view_id and node in ('movies', 'tvshows', 'musicvideos', 'music', 'mixed') and view_id not in whitelist: label = "%s %s" % (label.decode('utf-8'), _(33166)) - context.append((_(33123), "RunPlugin(plugin://plugin.video.emby/?mode=synclib&id=%s)" % view_id)) + context.append((_(33123), "RunPlugin(plugin://plugin.video.jellyfin/?mode=synclib&id=%s)" % view_id)) if view_id and node in ('movies', 'tvshows', 'musicvideos', 'music') and view_id in whitelist: - context.append((_(33136), "RunPlugin(plugin://plugin.video.emby/?mode=updatelib&id=%s)" % view_id)) - context.append((_(33132), "RunPlugin(plugin://plugin.video.emby/?mode=repairlib&id=%s)" % view_id)) - context.append((_(33133), "RunPlugin(plugin://plugin.video.emby/?mode=removelib&id=%s)" % view_id)) + context.append((_(33136), "RunPlugin(plugin://plugin.video.jellyfin/?mode=updatelib&id=%s)" % view_id)) + context.append((_(33132), "RunPlugin(plugin://plugin.video.jellyfin/?mode=repairlib&id=%s)" % view_id)) + context.append((_(33133), "RunPlugin(plugin://plugin.video.jellyfin/?mode=removelib&id=%s)" % view_id)) LOG.debug("--[ listing/%s/%s ] %s", node, label, path) @@ -177,25 +177,25 @@ def listing(): context = [] if server.get('ManualAddress'): - context.append((_(33141), "RunPlugin(plugin://plugin.video.emby/?mode=removeserver&server=%s)" % server['Id'])) + context.append((_(33141), "RunPlugin(plugin://plugin.video.jellyfin/?mode=removeserver&server=%s)" % server['Id'])) if 'AccessToken' not in server: - directory("%s (%s)" % (server['Name'], _(30539)), "plugin://plugin.video.emby/?mode=login&server=%s" % server['Id'], False, context=context) + directory("%s (%s)" % (server['Name'], _(30539)), "plugin://plugin.video.jellyfin/?mode=login&server=%s" % server['Id'], False, context=context) else: - directory(server['Name'], "plugin://plugin.video.emby/?mode=browse&server=%s" % server['Id'], context=context) + directory(server['Name'], "plugin://plugin.video.jellyfin/?mode=browse&server=%s" % server['Id'], context=context) - directory(_(33194), "plugin://plugin.video.emby/?mode=managelibs", True) - directory(_(33134), "plugin://plugin.video.emby/?mode=addserver", False) - directory(_(33054), "plugin://plugin.video.emby/?mode=adduser", False) - directory(_(5), "plugin://plugin.video.emby/?mode=settings", False) - directory(_(33058), "plugin://plugin.video.emby/?mode=reset", False) - directory(_(33192), "plugin://plugin.video.emby/?mode=restartservice", False) + directory(_(33194), "plugin://plugin.video.jellyfin/?mode=managelibs", True) + directory(_(33134), "plugin://plugin.video.jellyfin/?mode=addserver", False) + directory(_(33054), "plugin://plugin.video.jellyfin/?mode=adduser", False) + directory(_(5), "plugin://plugin.video.jellyfin/?mode=settings", False) + directory(_(33058), "plugin://plugin.video.jellyfin/?mode=reset", False) + directory(_(33192), "plugin://plugin.video.jellyfin/?mode=restartservice", False) if settings('backupPath'): - directory(_(33092), "plugin://plugin.video.emby/?mode=backup", False) + directory(_(33092), "plugin://plugin.video.jellyfin/?mode=backup", False) - directory(_(33163), None, False, artwork="special://home/addons/plugin.video.emby/donations.png") + directory(_(33163), None, False, artwork="special://home/addons/plugin.video.jellyfin/donations.png") xbmcplugin.setContent(int(sys.argv[1]), 'files') xbmcplugin.endOfDirectory(int(sys.argv[1])) @@ -216,20 +216,20 @@ def directory(label, path, folder=True, artwork=None, fanart=None, context=None) def dir_listitem(label, path, artwork=None, fanart=None): li = xbmcgui.ListItem(label, path=path) - li.setThumbnailImage(artwork or "special://home/addons/plugin.video.emby/icon.png") - li.setArt({"fanart": fanart or "special://home/addons/plugin.video.emby/fanart.jpg"}) - li.setArt({"landscape": artwork or fanart or "special://home/addons/plugin.video.emby/fanart.jpg"}) + li.setThumbnailImage(artwork or "special://home/addons/plugin.video.jellyfin/icon.png") + li.setArt({"fanart": fanart or "special://home/addons/plugin.video.jellyfin/fanart.jpg"}) + li.setArt({"landscape": artwork or fanart or "special://home/addons/plugin.video.jellyfin/fanart.jpg"}) return li def manage_libraries(): - directory(_(33098), "plugin://plugin.video.emby/?mode=refreshboxsets", False) - directory(_(33154), "plugin://plugin.video.emby/?mode=addlibs", False) - directory(_(33139), "plugin://plugin.video.emby/?mode=updatelibs", False) - directory(_(33140), "plugin://plugin.video.emby/?mode=repairlibs", False) - directory(_(33184), "plugin://plugin.video.emby/?mode=removelibs", False) - directory(_(33060), "plugin://plugin.video.emby/?mode=thememedia", False) + directory(_(33098), "plugin://plugin.video.jellyfin/?mode=refreshboxsets", False) + directory(_(33154), "plugin://plugin.video.jellyfin/?mode=addlibs", False) + directory(_(33139), "plugin://plugin.video.jellyfin/?mode=updatelibs", False) + directory(_(33140), "plugin://plugin.video.jellyfin/?mode=repairlibs", False) + directory(_(33184), "plugin://plugin.video.jellyfin/?mode=removelibs", False) + directory(_(33060), "plugin://plugin.video.jellyfin/?mode=thememedia", False) xbmcplugin.setContent(int(sys.argv[1]), 'files') xbmcplugin.endOfDirectory(int(sys.argv[1])) @@ -343,16 +343,16 @@ def browse(media, view_id=None, folder=None, server_id=None): 'folder': item['Id'], 'server': server_id } - path = "%s?%s" % ("plugin://plugin.video.emby/", urllib.urlencode(params)) + path = "%s?%s" % ("plugin://plugin.video.jellyfin/", urllib.urlencode(params)) context = [] if item['Type'] in ('Series', 'Season', 'Playlist'): - context.append(("Play", "RunPlugin(plugin://plugin.video.emby/?mode=playlist&id=%s&server=%s)" % (item['Id'], server_id))) + context.append(("Play", "RunPlugin(plugin://plugin.video.jellyfin/?mode=playlist&id=%s&server=%s)" % (item['Id'], server_id))) if item['UserData']['Played']: - context.append((_(16104), "RunPlugin(plugin://plugin.video.emby/?mode=unwatched&id=%s&server=%s)" % (item['Id'], server_id))) + context.append((_(16104), "RunPlugin(plugin://plugin.video.jellyfin/?mode=unwatched&id=%s&server=%s)" % (item['Id'], server_id))) else: - context.append((_(16103), "RunPlugin(plugin://plugin.video.emby/?mode=watched&id=%s&server=%s)" % (item['Id'], server_id))) + context.append((_(16103), "RunPlugin(plugin://plugin.video.jellyfin/?mode=watched&id=%s&server=%s)" % (item['Id'], server_id))) li.addContextMenuItems(context) list_li.append((path, li, True)) @@ -366,7 +366,7 @@ def browse(media, view_id=None, folder=None, server_id=None): 'folder': 'genres-%s' % item['Id'], 'server': server_id } - path = "%s?%s" % ("plugin://plugin.video.emby/", urllib.urlencode(params)) + path = "%s?%s" % ("plugin://plugin.video.jellyfin/", urllib.urlencode(params)) list_li.append((path, li, True)) else: @@ -376,14 +376,14 @@ def browse(media, view_id=None, folder=None, server_id=None): 'mode': "play", 'server': server_id } - path = "%s?%s" % ("plugin://plugin.video.emby/", urllib.urlencode(params)) + path = "%s?%s" % ("plugin://plugin.video.jellyfin/", urllib.urlencode(params)) li.setProperty('path', path) - context = [(_(13412), "RunPlugin(plugin://plugin.video.emby/?mode=playlist&id=%s&server=%s)" % (item['Id'], server_id))] + context = [(_(13412), "RunPlugin(plugin://plugin.video.jellyfin/?mode=playlist&id=%s&server=%s)" % (item['Id'], server_id))] if item['UserData']['Played']: - context.append((_(16104), "RunPlugin(plugin://plugin.video.emby/?mode=unwatched&id=%s&server=%s)" % (item['Id'], server_id))) + context.append((_(16104), "RunPlugin(plugin://plugin.video.jellyfin/?mode=unwatched&id=%s&server=%s)" % (item['Id'], server_id))) else: - context.append((_(16103), "RunPlugin(plugin://plugin.video.emby/?mode=watched&id=%s&server=%s)" % (item['Id'], server_id))) + context.append((_(16103), "RunPlugin(plugin://plugin.video.jellyfin/?mode=watched&id=%s&server=%s)" % (item['Id'], server_id))) li.addContextMenuItems(context) @@ -419,7 +419,7 @@ def browse_subfolders(media, view_id, server_id=None): 'folder': view_id if node[0] == 'all' else node[0], 'server': server_id } - path = "%s?%s" % ("plugin://plugin.video.emby/", urllib.urlencode(params)) + path = "%s?%s" % ("plugin://plugin.video.jellyfin/", urllib.urlencode(params)) directory(node[1] or view['Name'], path) xbmcplugin.setContent(int(sys.argv[1]), 'files') @@ -443,7 +443,7 @@ def browse_letters(media, view_id, server_id=None): 'folder': 'firstletter-%s' % node, 'server': server_id } - path = "%s?%s" % ("plugin://plugin.video.emby/", urllib.urlencode(params)) + path = "%s?%s" % ("plugin://plugin.video.jellyfin/", urllib.urlencode(params)) directory(node, path) xbmcplugin.setContent(int(sys.argv[1]), 'files') @@ -489,7 +489,7 @@ def get_fanart(item_id, path, server_id=None): ''' Get extra fanart for listitems. This is called by skinhelper. Images are stored locally, due to the Kodi caching system. ''' - if not item_id and 'plugin.video.emby' in path: + if not item_id and 'plugin.video.jellyfin' in path: item_id = path.split('/')[-2] if not item_id: @@ -533,7 +533,7 @@ def get_video_extras(item_id, path, server_id=None): ''' Returns the video files for the item as plugin listing, can be used to browse actual files or video extras, etc. ''' - if not item_id and 'plugin.video.emby' in path: + if not item_id and 'plugin.video.jellyfin' in path: item_id = path.split('/')[-2] if not item_id: @@ -547,7 +547,7 @@ def get_video_extras(item_id, path, server_id=None): #returns the video files for the item as plugin listing, can be used for browsing the actual files or videoextras etc. emby = embyserver.Read_EmbyServer() if not embyId: - if "plugin.video.emby" in embyPath: + if "plugin.video.jellyfin" in embyPath: embyId = embyPath.split("/")[-2] if embyId: item = emby.getItem(embyId) @@ -769,7 +769,7 @@ def get_themes(): from helper.playutils import PlayUtils from helper.xmls import tvtunes_nfo - library = xbmc.translatePath("special://profile/addon_data/plugin.video.emby/library").decode('utf-8') + library = xbmc.translatePath("special://profile/addon_data/plugin.video.jellyfin/library").decode('utf-8') play = settings('useDirectPaths') == "1" if not xbmcvfs.exists(library + '/'): @@ -863,8 +863,8 @@ def backup(): delete_folder(backup) - addon_data = xbmc.translatePath("special://profile/addon_data/plugin.video.emby").decode('utf-8') - destination_data = os.path.join(backup, "addon_data", "plugin.video.emby") + addon_data = xbmc.translatePath("special://profile/addon_data/plugin.video.jellyfin").decode('utf-8') + destination_data = os.path.join(backup, "addon_data", "plugin.video.jellyfin") destination_databases = os.path.join(backup, "Database") if not xbmcvfs.mkdirs(path) or not xbmcvfs.mkdirs(destination_databases): diff --git a/resources/lib/entrypoint/service.py b/resources/lib/entrypoint/service.py index 2fe12f32..0b0392f5 100644 --- a/resources/lib/entrypoint/service.py +++ b/resources/lib/entrypoint/service.py @@ -180,7 +180,8 @@ class Service(xbmc.Monitor): ''' LOG.info("--[ check updates/%s ]", objects.version) kodi = "DEV" if settings('devMode.bool') else xbmc.getInfoLabel('System.BuildVersion') - + # FIXME we do not want their updates + return False try: versions = requests.get('http://kodi.emby.media/Public%20testing/Dependencies/databases.json').json() build = find(versions, kodi) @@ -220,10 +221,10 @@ class Service(xbmc.Monitor): ''' All notifications are sent via NotifyAll built-in or Kodi. Central hub. ''' - if sender.lower() not in ('plugin.video.emby', 'xbmc'): + if sender.lower() not in ('plugin.video.jellyfin', 'xbmc'): return - if sender == 'plugin.video.emby': + if sender == 'plugin.video.jellyfin': method = method.split('.')[1] if method not in ('ServerUnreachable', 'ServerShuttingDown', 'UserDataChanged', 'ServerConnect', diff --git a/resources/lib/helper/playutils.py b/resources/lib/helper/playutils.py index f3146cdc..9814416b 100644 --- a/resources/lib/helper/playutils.py +++ b/resources/lib/helper/playutils.py @@ -503,7 +503,7 @@ class PlayUtils(object): ''' Download external subtitles to temp folder to be able to have proper names to streams. ''' - temp = xbmc.translatePath("special://profile/addon_data/plugin.video.emby/temp/").decode('utf-8') + temp = xbmc.translatePath("special://profile/addon_data/plugin.video.jellyfin/temp/").decode('utf-8') if not xbmcvfs.exists(temp): xbmcvfs.mkdir(temp) diff --git a/resources/lib/helper/translate.py b/resources/lib/helper/translate.py index a0731c2d..d6d62248 100644 --- a/resources/lib/helper/translate.py +++ b/resources/lib/helper/translate.py @@ -22,7 +22,7 @@ def _(string): if type(string) != int: string = STRINGS[string] - result = xbmcaddon.Addon('plugin.video.emby').getLocalizedString(string) + result = xbmcaddon.Addon('plugin.video.jellyfin').getLocalizedString(string) if not result: result = xbmc.getLocalizedString(string) diff --git a/resources/lib/helper/utils.py b/resources/lib/helper/utils.py index 71d5bbbb..09e229b4 100644 --- a/resources/lib/helper/utils.py +++ b/resources/lib/helper/utils.py @@ -26,7 +26,7 @@ LOG = logging.getLogger("EMBY."+__name__) ################################################################################################# def addon_id(): - return "plugin.video.emby" + return "plugin.video.jellyfin" def kodi_version(): return xbmc.getInfoLabel('System.BuildVersion')[:2] @@ -134,7 +134,7 @@ def event(method, data=None, sender=None, hexlify=False): ''' Data is a dictionary. ''' data = data or {} - sender = sender or "plugin.video.emby" + sender = sender or "plugin.video.jellyfin" if hexlify: data = '\\"[\\"{0}\\"]\\"'.format(binascii.hexlify(json.dumps(data))) @@ -150,7 +150,7 @@ def dialog(dialog_type, *args, **kwargs): if "icon" in kwargs: kwargs['icon'] = kwargs['icon'].replace("{emby}", - "special://home/addons/plugin.video.emby/icon.png") + "special://home/addons/plugin.video.jellyfin/icon.png") if "heading" in kwargs: kwargs['heading'] = kwargs['heading'].replace("{emby}", _('addon_name')) diff --git a/resources/lib/monitor.py b/resources/lib/monitor.py index d488092b..cbb03f26 100644 --- a/resources/lib/monitor.py +++ b/resources/lib/monitor.py @@ -50,10 +50,10 @@ class Monitor(xbmc.Monitor): def onNotification(self, sender, method, data): - if sender.lower() not in ('plugin.video.emby', 'xbmc', 'upnextprovider.signal'): + if sender.lower() not in ('plugin.video.jellyfin', 'xbmc', 'upnextprovider.signal'): return - if sender == 'plugin.video.emby': + if sender == 'plugin.video.jellyfin': method = method.split('.')[1] if method not in ('GetItem', 'ReportProgressRequested', 'LoadServer', 'RandomItems', 'Recommended', @@ -69,7 +69,7 @@ class Monitor(xbmc.Monitor): elif sender.startswith('upnextprovider'): method = method.split('.')[1] - if method not in ('plugin.video.emby_play_action'): + if method not in ('plugin.video.jellyfin_play_action'): return data = json.loads(data) @@ -312,7 +312,7 @@ class Monitor(xbmc.Monitor): "Mute,Unmute,SetVolume," "Play,Playstate,PlayNext,PlayMediaSource" ), - 'IconUrl': "https://raw.githubusercontent.com/MediaBrowser/plugin.video.emby/develop/kodi_icon.png", + 'IconUrl': "https://raw.githubusercontent.com/MediaBrowser/plugin.video.jellyfin/develop/kodi_icon.png", }) session = server['api'].get_device(self.device_id) diff --git a/resources/lib/objects/actions.py b/resources/lib/objects/actions.py index e2f550cf..b439dbd3 100644 --- a/resources/lib/objects/actions.py +++ b/resources/lib/objects/actions.py @@ -215,7 +215,7 @@ class Actions(object): LOG.info("[ playlist/%s ] %s", item['Id'], item['Name']) self.set_listitem(item, listitem, None, False) - path = "plugin://plugin.video.emby/?mode=play&id=%s&playlist=true" % item['Id'] + path = "plugin://plugin.video.jellyfin/?mode=play&id=%s&playlist=true" % item['Id'] listitem.setPath(path) playlist.add(path, listitem, index) @@ -312,9 +312,9 @@ class Actions(object): obj['Artwork']['Thumb'] = obj['Artwork']['Thumb'] or "" if not intro and not obj['Type'] == 'Trailer': - obj['Artwork']['Primary'] = obj['Artwork']['Primary'] or "special://home/addons/plugin.video.emby/icon.png" + obj['Artwork']['Primary'] = obj['Artwork']['Primary'] or "special://home/addons/plugin.video.jellyfin/icon.png" else: - obj['Artwork']['Primary'] = obj['Artwork']['Primary'] or obj['Artwork']['Thumb'] or (obj['Artwork']['Backdrop'][0] if len(obj['Artwork']['Backdrop']) else "special://home/addons/plugin.video.emby/fanart.jpg") + obj['Artwork']['Primary'] = obj['Artwork']['Primary'] or obj['Artwork']['Thumb'] or (obj['Artwork']['Backdrop'][0] if len(obj['Artwork']['Backdrop']) else "special://home/addons/plugin.video.jellyfin/fanart.jpg") obj['Artwork']['Primary'] += "&KodiTrailer=true" if obj['Type'] == 'Trailer' else "&KodiCinemaMode=true" obj['Artwork']['Backdrop'] = [obj['Artwork']['Primary']] @@ -472,9 +472,9 @@ class Actions(object): obj['Runtime'] = round(float((obj['Runtime'] or 0) / 10000000.0), 6) obj['PlayCount'] = API.get_playcount(obj['Played'], obj['PlayCount']) or 0 obj['Overlay'] = 7 if obj['Played'] else 6 - obj['Artwork']['Primary'] = obj['Artwork']['Primary'] or "special://home/addons/plugin.video.emby/icon.png" - obj['Artwork']['Thumb'] = obj['Artwork']['Thumb'] or "special://home/addons/plugin.video.emby/fanart.jpg" - obj['Artwork']['Backdrop'] = obj['Artwork']['Backdrop'] or ["special://home/addons/plugin.video.emby/fanart.jpg"] + obj['Artwork']['Primary'] = obj['Artwork']['Primary'] or "special://home/addons/plugin.video.jellyfin/icon.png" + obj['Artwork']['Thumb'] = obj['Artwork']['Thumb'] or "special://home/addons/plugin.video.jellyfin/fanart.jpg" + obj['Artwork']['Backdrop'] = obj['Artwork']['Backdrop'] or ["special://home/addons/plugin.video.jellyfin/fanart.jpg"] metadata = { @@ -657,7 +657,7 @@ class Actions(object): ''' Base resume dialog based on Kodi settings. ''' LOG.info("Resume dialog called.") - XML_PATH = (xbmcaddon.Addon('plugin.video.emby').getAddonInfo('path'), "default", "1080i") + XML_PATH = (xbmcaddon.Addon('plugin.video.jellyfin').getAddonInfo('path'), "default", "1080i") dialog = resume.ResumeDialog("script-emby-resume.xml", *XML_PATH) dialog.set_resume_point("Resume from %s" % str(timedelta(seconds=seektime)).split(".")[0]) diff --git a/resources/lib/objects/movies.py b/resources/lib/objects/movies.py index cf32699c..c49c587c 100644 --- a/resources/lib/objects/movies.py +++ b/resources/lib/objects/movies.py @@ -169,7 +169,7 @@ class Movies(KodiDb): if obj['LocalTrailer']: trailer = self.server['api'].get_local_trailers(obj['Id']) - obj['Trailer'] = "plugin://plugin.video.emby/trailer?id=%s&mode=play" % trailer[0]['Id'] + obj['Trailer'] = "plugin://plugin.video.jellyfin/trailer?id=%s&mode=play" % trailer[0]['Id'] elif obj['Trailer']: obj['Trailer'] = "plugin://plugin.video.youtube/play/?video_id=%s" % obj['Trailer'].rsplit('=', 1)[1] @@ -192,7 +192,7 @@ class Movies(KodiDb): obj['Path'] = obj['Path'].replace(obj['Filename'], "") else: - obj['Path'] = "plugin://plugin.video.emby.movies/" + obj['Path'] = "plugin://plugin.video.jellyfin/" params = { 'filename': obj['Filename'].encode('utf-8'), 'id': obj['Id'], diff --git a/resources/lib/objects/musicvideos.py b/resources/lib/objects/musicvideos.py index 1a528ba4..1dc536e6 100644 --- a/resources/lib/objects/musicvideos.py +++ b/resources/lib/objects/musicvideos.py @@ -174,7 +174,7 @@ class MusicVideos(KodiDb): obj['Path'] = obj['Path'].replace(obj['Filename'], "") else: - obj['Path'] = "plugin://plugin.video.emby.musicvideos/" + obj['Path'] = "plugin://plugin.video.jellyfin/" params = { 'filename': obj['Filename'].encode('utf-8'), 'id': obj['Id'], diff --git a/resources/lib/objects/tvshows.py b/resources/lib/objects/tvshows.py index 5e8c4ec3..d3ab66fb 100644 --- a/resources/lib/objects/tvshows.py +++ b/resources/lib/objects/tvshows.py @@ -217,7 +217,7 @@ class TVShows(KodiDb): if not validate(obj['Path']): raise Exception("Failed to validate path. User stopped.") else: - obj['TopLevel'] = "plugin://plugin.video.emby.tvshows/" + obj['TopLevel'] = "plugin://plugin.video.jellyfin/" obj['Path'] = "%s%s/" % (obj['TopLevel'], obj['Id']) @@ -354,7 +354,7 @@ class TVShows(KodiDb): if not self.direct_path and obj['Resume']: temp_obj = dict(obj) - temp_obj['Path'] = "plugin://plugin.video.emby.tvshows/" + temp_obj['Path'] = "plugin://plugin.video.jellyfin/" temp_obj['PathId'] = self.get_path(*values(temp_obj, QU.get_path_obj)) temp_obj['FileId'] = self.add_file(*values(temp_obj, QU.add_file_obj)) self.update_file(*values(temp_obj, QU.update_file_obj)) @@ -419,7 +419,7 @@ class TVShows(KodiDb): obj['Path'] = obj['Path'].replace(obj['Filename'], "") else: - obj['Path'] = "plugin://plugin.video.emby.tvshows/%s/" % obj['SeriesId'] + obj['Path'] = "plugin://plugin.video.jellyfin/%s/" % obj['SeriesId'] params = { 'filename': obj['Filename'].encode('utf-8'), 'id': obj['Id'], @@ -493,14 +493,14 @@ class TVShows(KodiDb): temp_obj = dict(obj) temp_obj['Filename'] = self.get_filename(*values(temp_obj, QU.get_file_obj)) - temp_obj['Path'] = "plugin://plugin.video.emby.tvshows/" + temp_obj['Path'] = "plugin://plugin.video.jellyfin/" self.remove_file(*values(temp_obj, QU.delete_file_obj)) elif not self.direct_path and obj['Resume']: temp_obj = dict(obj) temp_obj['Filename'] = self.get_filename(*values(temp_obj, QU.get_file_obj)) - temp_obj['PathId'] = self.get_path("plugin://plugin.video.emby.tvshows/") + temp_obj['PathId'] = self.get_path("plugin://plugin.video.jellyfin/") temp_obj['FileId'] = self.add_file(*values(temp_obj, QU.add_file_obj)) self.update_file(*values(temp_obj, QU.update_file_obj)) self.add_playstate(*values(temp_obj, QU.add_bookmark_obj)) diff --git a/resources/lib/player.py b/resources/lib/player.py index 2f522008..277b50d8 100644 --- a/resources/lib/player.py +++ b/resources/lib/player.py @@ -415,7 +415,7 @@ class Player(xbmc.Player): item['Server']['api'].close_transcode(item['DeviceId']) - path = xbmc.translatePath("special://profile/addon_data/plugin.video.emby/temp/").decode('utf-8') + path = xbmc.translatePath("special://profile/addon_data/plugin.video.jellyfin/temp/").decode('utf-8') if xbmcvfs.exists(path): dirs, files = xbmcvfs.listdir(path) diff --git a/resources/lib/views.py b/resources/lib/views.py index d75b91d6..7b39ea2a 100644 --- a/resources/lib/views.py +++ b/resources/lib/views.py @@ -359,7 +359,7 @@ class Views(object): else: element = etree.Element('node', {'order': str(index), 'type': "folder"}) - etree.SubElement(element, 'icon').text = "special://home/addons/plugin.video.emby/icon.png" + etree.SubElement(element, 'icon').text = "special://home/addons/plugin.video.jellyfin/icon.png" return element @@ -877,7 +877,7 @@ class Views(object): 'mode': "nextepisodes", 'limit': self.limit } - return "%s?%s" % ("plugin://plugin.video.emby/", urllib.urlencode(params)) + return "%s?%s" % ("plugin://plugin.video.jellyfin/", urllib.urlencode(params)) def window_browse(self, view, node=None): @@ -892,7 +892,7 @@ class Views(object): if node: params['folder'] = node - return "%s?%s" % ("plugin://plugin.video.emby/", urllib.urlencode(params)) + return "%s?%s" % ("plugin://plugin.video.jellyfin/", urllib.urlencode(params)) def window_clear(self, name=None): diff --git a/resources/lib/webservice.py b/resources/lib/webservice.py index 9e5f9d33..0561d301 100644 --- a/resources/lib/webservice.py +++ b/resources/lib/webservice.py @@ -126,7 +126,7 @@ class requestHandler(BaseHTTPServer.BaseHTTPRequestHandler): xbmc.log("[ webservice ] path: %s params: %s" % (str(self.path), str(params)), xbmc.LOGWARNING) - path = ("plugin://plugin.video.emby?mode=play&id=%s&dbid=%s&filename=%s&transcode=%s" + path = ("plugin://plugin.video.jellyfin?mode=play&id=%s&dbid=%s&filename=%s&transcode=%s" % (params.get('Id'), params.get('KodiId'), params.get('Name'), params.get('transcode') or False)) self.send_response(200) diff --git a/resources/settings.xml b/resources/settings.xml index 27853e48..3cec88c2 100644 --- a/resources/settings.xml +++ b/resources/settings.xml @@ -5,11 +5,11 @@ - - + + - + @@ -92,19 +92,19 @@ - - + + - + - + - + diff --git a/resources/skins/default/1080i/script-emby-connect-login-manual.xml b/resources/skins/default/1080i/script-emby-connect-login-manual.xml index b2175bc1..d83cb56e 100644 --- a/resources/skins/default/1080i/script-emby-connect-login-manual.xml +++ b/resources/skins/default/1080i/script-emby-connect-login-manual.xml @@ -57,12 +57,12 @@ font13 white 66000000 - + 110 - + ffe1e1e1 66000000 font12 @@ -83,7 +83,7 @@ 110 - + ffe1e1e1 66000000 font12 @@ -103,7 +103,7 @@ - + 426 65 font13 @@ -121,7 +121,7 @@ Conditional - + 426 65 font13 diff --git a/resources/skins/default/1080i/script-emby-connect-login.xml b/resources/skins/default/1080i/script-emby-connect-login.xml index 3b46c85e..7fbb8842 100644 --- a/resources/skins/default/1080i/script-emby-connect-login.xml +++ b/resources/skins/default/1080i/script-emby-connect-login.xml @@ -56,12 +56,12 @@ font13 white 66000000 - + 110 - + ffe1e1e1 66000000 font12 @@ -82,7 +82,7 @@ 110 - + ffe1e1e1 66000000 font12 @@ -102,7 +102,7 @@ - + 426 65 font13 @@ -119,7 +119,7 @@ Conditional - + 426 65 font13 @@ -141,7 +141,7 @@ - + font_flag ff464646 66000000 @@ -165,7 +165,7 @@ 135 center - + font_flag true FF52b54b diff --git a/resources/skins/default/1080i/script-emby-connect-server-manual.xml b/resources/skins/default/1080i/script-emby-connect-server-manual.xml index 7aa3f37a..7a436d61 100644 --- a/resources/skins/default/1080i/script-emby-connect-server-manual.xml +++ b/resources/skins/default/1080i/script-emby-connect-server-manual.xml @@ -57,12 +57,12 @@ font13 white 66000000 - + 110 - + ffe1e1e1 66000000 font12 @@ -83,7 +83,7 @@ 110 - + ffe1e1e1 66000000 font12 @@ -103,7 +103,7 @@ - + 426 65 font13 @@ -120,7 +120,7 @@ Conditional - + 426 65 font13 diff --git a/resources/skins/default/1080i/script-emby-connect-server.xml b/resources/skins/default/1080i/script-emby-connect-server.xml index 37bf63e0..c20c535d 100644 --- a/resources/skins/default/1080i/script-emby-connect-server.xml +++ b/resources/skins/default/1080i/script-emby-connect-server.xml @@ -64,7 +64,7 @@ font13 white 66000000 - + 200 @@ -161,7 +161,7 @@ 20 - + 476 65 font13 @@ -179,7 +179,7 @@ Conditional - + 476 65 font13 @@ -197,7 +197,7 @@ Conditional - + 476 65 font13 diff --git a/resources/skins/default/1080i/script-emby-connect-users.xml b/resources/skins/default/1080i/script-emby-connect-users.xml index 9547d718..dfb2ce91 100644 --- a/resources/skins/default/1080i/script-emby-connect-users.xml +++ b/resources/skins/default/1080i/script-emby-connect-users.xml @@ -57,7 +57,7 @@ font13 white 66000000 - + Conditional @@ -175,7 +175,7 @@ - + 874 65 font13 @@ -193,7 +193,7 @@ Conditional - + 874 65 font13 diff --git a/service.py b/service.py index 3292a122..64dfc595 100644 --- a/service.py +++ b/service.py @@ -13,7 +13,7 @@ import xbmcaddon ################################################################################################# -__addon__ = xbmcaddon.Addon(id='plugin.video.emby') +__addon__ = xbmcaddon.Addon(id='plugin.video.jellyfin') __base__ = xbmc.translatePath(os.path.join(__addon__.getAddonInfo('path'), 'resources', 'lib')).decode('utf-8') __libraries__ = xbmc.translatePath(os.path.join(__addon__.getAddonInfo('path'), 'libraries')).decode('utf-8') __pcache__ = xbmc.translatePath(os.path.join(__addon__.getAddonInfo('profile'), 'emby')).decode('utf-8')