mirror of
https://github.com/jellyfin/jellyfin-kodi.git
synced 2024-12-25 02:06:09 +00:00
Rebrand addon name and id and make it compatible with Jellyfin
This commit is contained in:
parent
32eaecfea1
commit
168bab2b01
37 changed files with 136 additions and 142 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -4,3 +4,4 @@ machine_guid
|
|||
/resources/media/Thumbs.db
|
||||
|
||||
.idea/
|
||||
.DS_Store
|
||||
|
|
24
addon.xml
24
addon.xml
|
@ -1,13 +1,10 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||
<addon id="plugin.video.emby"
|
||||
name="Emby"
|
||||
version="4.0.3"
|
||||
<addon id="plugin.video.jellyfin"
|
||||
name="Jellyfin"
|
||||
version="10.1.0"
|
||||
provider-name="angelblue05">
|
||||
<requires>
|
||||
<import addon="xbmc.python" version="2.25.0"/>
|
||||
<import addon="plugin.video.emby.movies" version="0.14" />
|
||||
<import addon="plugin.video.emby.tvshows" version="0.14" />
|
||||
<import addon="plugin.video.emby.musicvideos" version="0.14" />
|
||||
</requires>
|
||||
<extension point="xbmc.python.pluginsource"
|
||||
library="default.py">
|
||||
|
@ -31,18 +28,13 @@
|
|||
<platform>all</platform>
|
||||
<language>en</language>
|
||||
<license>GNU GENERAL PUBLIC LICENSE. Version 2, June 1991</license>
|
||||
<forum>http://emby.media/community/index.php?/forum/99-kodi/</forum>
|
||||
<website>http://emby.media/</website>
|
||||
<source>https://github.com/MediaBrowser/plugin.video.emby</source>
|
||||
<forum>https://forum.jellyfin.org</forum>
|
||||
<website>https://jellyfin.media/</website>
|
||||
<source>https://github.com/jellyfin/jellyfin-kodi</source>
|
||||
<summary lang="en"></summary>
|
||||
<description lang="en">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!</description>
|
||||
<description lang="en">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!</description>
|
||||
<news>
|
||||
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
|
||||
</news>
|
||||
</extension>
|
||||
</addon>
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -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')
|
||||
|
|
|
@ -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')
|
||||
|
|
BIN
icon.png
BIN
icon.png
Binary file not shown.
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 40 KiB |
|
@ -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 <horstepipe@googlemail.com>, 2018
|
||||
|
|
|
@ -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 ""
|
||||
|
|
|
@ -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 <balayop@yahoo.fr>, 2018
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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 <michal@sawicz.net>, 2019
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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')
|
||||
|
||||
#################################################################################################
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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):
|
||||
|
|
|
@ -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',
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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'))
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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])
|
||||
|
|
|
@ -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'],
|
||||
|
|
|
@ -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'],
|
||||
|
|
|
@ -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))
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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):
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -5,11 +5,11 @@
|
|||
<setting label="30003" id="idMethod" type="enum" values="Manual|Emby Connect" default="0" />
|
||||
<setting label="30024" id="username" type="text" default="" visible="eq(-1,0)" />
|
||||
<setting label="30543" id="connectUsername" type="text" default="" visible="!eq(0,) + eq(-2,1)" />
|
||||
<setting label="30600" type="action" action="RunPlugin(plugin://plugin.video.emby?mode=connect)" visible="eq(-3,1) + eq(-1,)" option="close" />
|
||||
<setting label="30618" type="action" action="RunPlugin(plugin://plugin.video.emby?mode=connect)" visible="eq(-4,1) + !eq(-2,)" option="close" />
|
||||
<setting label="30600" type="action" action="RunPlugin(plugin://plugin.video.jellyfin?mode=connect)" visible="eq(-3,1) + eq(-1,)" option="close" />
|
||||
<setting label="30618" type="action" action="RunPlugin(plugin://plugin.video.jellyfin?mode=connect)" visible="eq(-4,1) + !eq(-2,)" option="close" />
|
||||
<setting label="30001" id="serverName" type="text" default="" />
|
||||
<setting label="30000" id="server" type="text" default="" visible="true" />
|
||||
<setting label="33150" type="action" action="RunPlugin(plugin://plugin.video.emby?mode=updateserver)" visible="!eq(-1,)" option="close" />
|
||||
<setting label="33150" type="action" action="RunPlugin(plugin://plugin.video.jellyfin?mode=updateserver)" visible="!eq(-1,)" option="close" />
|
||||
<setting label="30500" id="sslverify" type="bool" default="true" visible="true" />
|
||||
|
||||
<setting type="sep" />
|
||||
|
@ -92,19 +92,19 @@
|
|||
<category label="30022"><!-- Advanced -->
|
||||
<setting label="30004" id="logLevel" type="enum" values="Disabled|Info|Debug" default="1" />
|
||||
<setting label="33164" id="maskInfo" type="bool" default="true" />
|
||||
<setting label="30239" type="action" action="RunPlugin(plugin://plugin.video.emby?mode=reset)" option="close" />
|
||||
<setting label="30535" type="action" action="RunPlugin(plugin://plugin.video.emby?mode=deviceid)" option="close" />
|
||||
<setting label="30239" type="action" action="RunPlugin(plugin://plugin.video.jellyfin?mode=reset)" option="close" />
|
||||
<setting label="30535" type="action" action="RunPlugin(plugin://plugin.video.jellyfin?mode=deviceid)" option="close" />
|
||||
<setting label="33196" type="lsep" />
|
||||
<setting label="33195" id="enableAddon" type="bool" default="true" />
|
||||
<setting label="33180" type="action" action="RunPlugin(plugin://plugin.video.emby?mode=restartservice)" option="close" />
|
||||
<setting label="33180" type="action" action="RunPlugin(plugin://plugin.video.jellyfin?mode=restartservice)" option="close" />
|
||||
<setting label="30529" id="startupDelay" type="number" default="0" option="int" />
|
||||
<setting label="33161" type="action" action="RunPlugin(plugin://plugin.video.emby?mode=checkupdate)" option="close" />
|
||||
<setting label="33161" type="action" action="RunPlugin(plugin://plugin.video.jellyfin?mode=checkupdate)" option="close" />
|
||||
<setting label="Developer mode" id="devMode" type="bool" default="false" />
|
||||
|
||||
<setting type="sep" />
|
||||
<setting label="33104" type="lsep"/>
|
||||
<setting label="33093" type="folder" id="backupPath" option="writeable" />
|
||||
<setting label="33092" type="action" action="RunPlugin(plugin://plugin.video.emby?mode=backup)" visible="!eq(-1,)" option="close" />
|
||||
<setting label="33092" type="action" action="RunPlugin(plugin://plugin.video.jellyfin?mode=backup)" visible="!eq(-1,)" option="close" />
|
||||
</category>
|
||||
|
||||
</settings>
|
||||
|
|
|
@ -57,12 +57,12 @@
|
|||
<font>font13</font>
|
||||
<textcolor>white</textcolor>
|
||||
<textshadow>66000000</textshadow>
|
||||
<label>[B]$ADDON[plugin.video.emby 30612][/B]</label>
|
||||
<label>[B]$ADDON[plugin.video.jellyfin 30612][/B]</label>
|
||||
</control>
|
||||
<control type="group" id="101">
|
||||
<height>110</height>
|
||||
<control type="label">
|
||||
<label>$ADDON[plugin.video.emby 30024]</label>
|
||||
<label>$ADDON[plugin.video.jellyfin 30024]</label>
|
||||
<textcolor>ffe1e1e1</textcolor>
|
||||
<shadowcolor>66000000</shadowcolor>
|
||||
<font>font12</font>
|
||||
|
@ -83,7 +83,7 @@
|
|||
<control type="group" id="102">
|
||||
<height>110</height>
|
||||
<control type="label">
|
||||
<label>$ADDON[plugin.video.emby 30602]</label>
|
||||
<label>$ADDON[plugin.video.jellyfin 30602]</label>
|
||||
<textcolor>ffe1e1e1</textcolor>
|
||||
<textshadow>66000000</textshadow>
|
||||
<font>font12</font>
|
||||
|
@ -103,7 +103,7 @@
|
|||
</control>
|
||||
</control>
|
||||
<control type="button" id="200">
|
||||
<label>[B]$ADDON[plugin.video.emby 30605][/B]</label>
|
||||
<label>[B]$ADDON[plugin.video.jellyfin 30605][/B]</label>
|
||||
<width>426</width>
|
||||
<height>65</height>
|
||||
<font>font13</font>
|
||||
|
@ -121,7 +121,7 @@
|
|||
<animation effect="slide" time="0" end="17,0" condition="true">Conditional</animation>
|
||||
</control>
|
||||
<control type="button" id="201">
|
||||
<label>[B]$ADDON[plugin.video.emby 30606][/B]</label>
|
||||
<label>[B]$ADDON[plugin.video.jellyfin 30606][/B]</label>
|
||||
<width>426</width>
|
||||
<height>65</height>
|
||||
<font>font13</font>
|
||||
|
|
|
@ -56,12 +56,12 @@
|
|||
<font>font13</font>
|
||||
<textcolor>white</textcolor>
|
||||
<textshadow>66000000</textshadow>
|
||||
<label>[B]$ADDON[plugin.video.emby 30612][/B]</label>
|
||||
<label>[B]$ADDON[plugin.video.jellyfin 30612][/B]</label>
|
||||
</control>
|
||||
<control type="group" id="101">
|
||||
<height>110</height>
|
||||
<control type="label">
|
||||
<label>$ADDON[plugin.video.emby 30024]</label>
|
||||
<label>$ADDON[plugin.video.jellyfin 30024]</label>
|
||||
<textcolor>ffe1e1e1</textcolor>
|
||||
<shadowcolor>66000000</shadowcolor>
|
||||
<font>font12</font>
|
||||
|
@ -82,7 +82,7 @@
|
|||
<control type="group" id="102">
|
||||
<height>110</height>
|
||||
<control type="label">
|
||||
<label>$ADDON[plugin.video.emby 30602]</label>
|
||||
<label>$ADDON[plugin.video.jellyfin 30602]</label>
|
||||
<textcolor>ffe1e1e1</textcolor>
|
||||
<textshadow>66000000</textshadow>
|
||||
<font>font12</font>
|
||||
|
@ -102,7 +102,7 @@
|
|||
</control>
|
||||
</control>
|
||||
<control type="button" id="200">
|
||||
<label>[B]$ADDON[plugin.video.emby 30605][/B]</label>
|
||||
<label>[B]$ADDON[plugin.video.jellyfin 30605][/B]</label>
|
||||
<width>426</width>
|
||||
<height>65</height>
|
||||
<font>font13</font>
|
||||
|
@ -119,7 +119,7 @@
|
|||
<animation effect="slide" time="0" end="17,0" condition="true">Conditional</animation>
|
||||
</control>
|
||||
<control type="button" id="201">
|
||||
<label>[B]$ADDON[plugin.video.emby 30606][/B]</label>
|
||||
<label>[B]$ADDON[plugin.video.jellyfin 30606][/B]</label>
|
||||
<width>426</width>
|
||||
<height>65</height>
|
||||
<font>font13</font>
|
||||
|
@ -141,7 +141,7 @@
|
|||
</control>
|
||||
<control type="group">
|
||||
<control type="label">
|
||||
<label>$ADDON[plugin.video.emby 30603]</label>
|
||||
<label>$ADDON[plugin.video.jellyfin 30603]</label>
|
||||
<font>font_flag</font>
|
||||
<textcolor>ff464646</textcolor>
|
||||
<shadowcolor>66000000</shadowcolor>
|
||||
|
@ -165,7 +165,7 @@
|
|||
<control type="label">
|
||||
<top>135</top>
|
||||
<align>center</align>
|
||||
<label>[UPPERCASE]$ADDON[plugin.video.emby 30604][/UPPERCASE]</label>
|
||||
<label>[UPPERCASE]$ADDON[plugin.video.jellyfin 30604][/UPPERCASE]</label>
|
||||
<font>font_flag</font>
|
||||
<scroll>true</scroll>
|
||||
<textcolor>FF52b54b</textcolor>
|
||||
|
|
|
@ -57,12 +57,12 @@
|
|||
<font>font13</font>
|
||||
<textcolor>white</textcolor>
|
||||
<textshadow>66000000</textshadow>
|
||||
<label>[B]$ADDON[plugin.video.emby 30614][/B]</label>
|
||||
<label>[B]$ADDON[plugin.video.jellyfin 30614][/B]</label>
|
||||
</control>
|
||||
<control type="group" id="101">
|
||||
<height>110</height>
|
||||
<control type="label">
|
||||
<label>$ADDON[plugin.video.emby 30615]</label>
|
||||
<label>$ADDON[plugin.video.jellyfin 30615]</label>
|
||||
<textcolor>ffe1e1e1</textcolor>
|
||||
<shadowcolor>66000000</shadowcolor>
|
||||
<font>font12</font>
|
||||
|
@ -83,7 +83,7 @@
|
|||
<control type="group" id="102">
|
||||
<height>110</height>
|
||||
<control type="label">
|
||||
<label>$ADDON[plugin.video.emby 30030]</label>
|
||||
<label>$ADDON[plugin.video.jellyfin 30030]</label>
|
||||
<textcolor>ffe1e1e1</textcolor>
|
||||
<textshadow>66000000</textshadow>
|
||||
<font>font12</font>
|
||||
|
@ -103,7 +103,7 @@
|
|||
</control>
|
||||
</control>
|
||||
<control type="button" id="200">
|
||||
<label>[B]$ADDON[plugin.video.emby 30616][/B]</label>
|
||||
<label>[B]$ADDON[plugin.video.jellyfin 30616][/B]</label>
|
||||
<width>426</width>
|
||||
<height>65</height>
|
||||
<font>font13</font>
|
||||
|
@ -120,7 +120,7 @@
|
|||
<animation effect="slide" time="0" end="17,0" condition="true">Conditional</animation>
|
||||
</control>
|
||||
<control type="button" id="201">
|
||||
<label>[B]$ADDON[plugin.video.emby 30606][/B]</label>
|
||||
<label>[B]$ADDON[plugin.video.jellyfin 30606][/B]</label>
|
||||
<width>426</width>
|
||||
<height>65</height>
|
||||
<font>font13</font>
|
||||
|
|
|
@ -64,7 +64,7 @@
|
|||
<font>font13</font>
|
||||
<textcolor>white</textcolor>
|
||||
<textshadow>66000000</textshadow>
|
||||
<label>[B]$ADDON[plugin.video.emby 30607][/B]</label>
|
||||
<label>[B]$ADDON[plugin.video.jellyfin 30607][/B]</label>
|
||||
</control>
|
||||
<control type="group" id="101">
|
||||
<height>200</height>
|
||||
|
@ -161,7 +161,7 @@
|
|||
<height>20</height>
|
||||
</control>
|
||||
<control type="button" id="205">
|
||||
<label>[B]$ADDON[plugin.video.emby 30600][/B]</label>
|
||||
<label>[B]$ADDON[plugin.video.jellyfin 30600][/B]</label>
|
||||
<width>476</width>
|
||||
<height>65</height>
|
||||
<font>font13</font>
|
||||
|
@ -179,7 +179,7 @@
|
|||
<animation effect="slide" time="0" end="17,0" condition="true">Conditional</animation>
|
||||
</control>
|
||||
<control type="button" id="206">
|
||||
<label>[B]$ADDON[plugin.video.emby 30611][/B]</label>
|
||||
<label>[B]$ADDON[plugin.video.jellyfin 30611][/B]</label>
|
||||
<width>476</width>
|
||||
<height>65</height>
|
||||
<font>font13</font>
|
||||
|
@ -197,7 +197,7 @@
|
|||
<animation effect="slide" time="0" end="17,0" condition="true">Conditional</animation>
|
||||
</control>
|
||||
<control type="button" id="201">
|
||||
<label>[B]$ADDON[plugin.video.emby 30606][/B]</label>
|
||||
<label>[B]$ADDON[plugin.video.jellyfin 30606][/B]</label>
|
||||
<width>476</width>
|
||||
<height>65</height>
|
||||
<font>font13</font>
|
||||
|
|
|
@ -57,7 +57,7 @@
|
|||
<font>font13</font>
|
||||
<textcolor>white</textcolor>
|
||||
<textshadow>66000000</textshadow>
|
||||
<label>[B]$ADDON[plugin.video.emby 30612][/B]</label>
|
||||
<label>[B]$ADDON[plugin.video.jellyfin 30612][/B]</label>
|
||||
</control>
|
||||
<control type="list" id="155">
|
||||
<animation effect="slide" time="0" start="0,0" end="148,0" condition="Integer.IsEqual(Container(155).NumItems,2)">Conditional</animation>
|
||||
|
@ -175,7 +175,7 @@
|
|||
</focusedlayout>
|
||||
</control>
|
||||
<control type="button" id="200">
|
||||
<label>[B]$ADDON[plugin.video.emby 30540][/B]</label>
|
||||
<label>[B]$ADDON[plugin.video.jellyfin 30540][/B]</label>
|
||||
<width>874</width>
|
||||
<height>65</height>
|
||||
<font>font13</font>
|
||||
|
@ -193,7 +193,7 @@
|
|||
<animation effect="slide" time="0" end="17,0" condition="true">Conditional</animation>
|
||||
</control>
|
||||
<control type="button" id="201">
|
||||
<label>[B]$ADDON[plugin.video.emby 30606][/B]</label>
|
||||
<label>[B]$ADDON[plugin.video.jellyfin 30606][/B]</label>
|
||||
<width>874</width>
|
||||
<height>65</height>
|
||||
<font>font13</font>
|
||||
|
|
|
@ -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')
|
||||
|
|
Loading…
Reference in a new issue