mirror of
https://github.com/jellyfin/jellyfin-kodi.git
synced 2025-05-03 16:08:47 +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
|
/resources/media/Thumbs.db
|
||||||
|
|
||||||
.idea/
|
.idea/
|
||||||
|
.DS_Store
|
||||||
|
|
24
addon.xml
24
addon.xml
|
@ -1,13 +1,10 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
<addon id="plugin.video.emby"
|
<addon id="plugin.video.jellyfin"
|
||||||
name="Emby"
|
name="Jellyfin"
|
||||||
version="4.0.3"
|
version="10.1.0"
|
||||||
provider-name="angelblue05">
|
provider-name="angelblue05">
|
||||||
<requires>
|
<requires>
|
||||||
<import addon="xbmc.python" version="2.25.0"/>
|
<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>
|
</requires>
|
||||||
<extension point="xbmc.python.pluginsource"
|
<extension point="xbmc.python.pluginsource"
|
||||||
library="default.py">
|
library="default.py">
|
||||||
|
@ -31,18 +28,13 @@
|
||||||
<platform>all</platform>
|
<platform>all</platform>
|
||||||
<language>en</language>
|
<language>en</language>
|
||||||
<license>GNU GENERAL PUBLIC LICENSE. Version 2, June 1991</license>
|
<license>GNU GENERAL PUBLIC LICENSE. Version 2, June 1991</license>
|
||||||
<forum>http://emby.media/community/index.php?/forum/99-kodi/</forum>
|
<forum>https://forum.jellyfin.org</forum>
|
||||||
<website>http://emby.media/</website>
|
<website>https://jellyfin.media/</website>
|
||||||
<source>https://github.com/MediaBrowser/plugin.video.emby</source>
|
<source>https://github.com/jellyfin/jellyfin-kodi</source>
|
||||||
<summary lang="en"></summary>
|
<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>
|
<news>
|
||||||
New stable release
|
Rebrand in progress
|
||||||
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!
|
|
||||||
</news>
|
</news>
|
||||||
</extension>
|
</extension>
|
||||||
</addon>
|
</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')
|
__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')
|
__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')
|
__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')
|
__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')
|
__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')
|
__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')
|
__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')
|
__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')
|
__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
|
# Emby for Kodi language file
|
||||||
# Addon Name: Emby for Kodi
|
# Addon Name: Emby for Kodi
|
||||||
# Addon id: plugin.video.emby
|
# Addon id: plugin.video.jellyfin
|
||||||
# Addon Provider: angelblue05
|
# Addon Provider: angelblue05
|
||||||
# Translators:
|
# Translators:
|
||||||
# Wolfgang Petri <horstepipe@googlemail.com>, 2018
|
# Wolfgang Petri <horstepipe@googlemail.com>, 2018
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Emby for Kodi language file
|
# Emby for Kodi language file
|
||||||
# Addon Name: Emby for Kodi
|
# Addon Name: Emby for Kodi
|
||||||
# Addon id: plugin.video.emby
|
# Addon id: plugin.video.jellyfin
|
||||||
# Addon Provider: angelblue05
|
# Addon Provider: angelblue05
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Emby for Kodi language file
|
# Emby for Kodi language file
|
||||||
# Addon Name: Emby for Kodi
|
# Addon Name: Emby for Kodi
|
||||||
# Addon id: plugin.video.emby
|
# Addon id: plugin.video.jellyfin
|
||||||
# Addon Provider: angelblue05
|
# Addon Provider: angelblue05
|
||||||
# Translators:
|
# Translators:
|
||||||
# Jean Fontaine <balayop@yahoo.fr>, 2018
|
# Jean Fontaine <balayop@yahoo.fr>, 2018
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Emby for Kodi language file
|
# Emby for Kodi language file
|
||||||
# Addon Name: Emby for Kodi
|
# Addon Name: Emby for Kodi
|
||||||
# Addon id: plugin.video.emby
|
# Addon id: plugin.video.jellyfin
|
||||||
# Addon Provider: angelblue05
|
# Addon Provider: angelblue05
|
||||||
# Translators:
|
# Translators:
|
||||||
# EffeF, 2019
|
# EffeF, 2019
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Emby for Kodi language file
|
# Emby for Kodi language file
|
||||||
# Addon Name: Emby for Kodi
|
# Addon Name: Emby for Kodi
|
||||||
# Addon id: plugin.video.emby
|
# Addon id: plugin.video.jellyfin
|
||||||
# Addon Provider: angelblue05
|
# Addon Provider: angelblue05
|
||||||
# Translators:
|
# Translators:
|
||||||
# 63ac71fcbd0581bb567b1f0d798c7970, 2019
|
# 63ac71fcbd0581bb567b1f0d798c7970, 2019
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Emby for Kodi language file
|
# Emby for Kodi language file
|
||||||
# Addon Name: Emby for Kodi
|
# Addon Name: Emby for Kodi
|
||||||
# Addon id: plugin.video.emby
|
# Addon id: plugin.video.jellyfin
|
||||||
# Addon Provider: angelblue05
|
# Addon Provider: angelblue05
|
||||||
# Translators:
|
# Translators:
|
||||||
# Michał Sawicz <michal@sawicz.net>, 2019
|
# Michał Sawicz <michal@sawicz.net>, 2019
|
||||||
|
|
|
@ -82,7 +82,7 @@ def get_device_id(reset=False):
|
||||||
if client_id:
|
if client_id:
|
||||||
return 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):
|
if not xbmcvfs.exists(directory):
|
||||||
xbmcvfs.mkdir(directory)
|
xbmcvfs.mkdir(directory)
|
||||||
|
|
|
@ -238,7 +238,7 @@ def reset():
|
||||||
if dialog("yesno", heading="{emby}", line1=_(33086)):
|
if dialog("yesno", heading="{emby}", line1=_(33086)):
|
||||||
reset_artwork()
|
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)):
|
if dialog("yesno", heading="{emby}", line1=_(33087)):
|
||||||
|
|
||||||
|
@ -326,7 +326,7 @@ def reset_artwork():
|
||||||
|
|
||||||
def get_sync():
|
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):
|
if not xbmcvfs.exists(path):
|
||||||
xbmcvfs.mkdirs(path)
|
xbmcvfs.mkdirs(path)
|
||||||
|
@ -346,7 +346,7 @@ def get_sync():
|
||||||
|
|
||||||
def save_sync(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):
|
if not xbmcvfs.exists(path):
|
||||||
xbmcvfs.mkdirs(path)
|
xbmcvfs.mkdirs(path)
|
||||||
|
@ -358,7 +358,7 @@ def save_sync(sync):
|
||||||
|
|
||||||
def get_credentials():
|
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):
|
if not xbmcvfs.exists(path):
|
||||||
xbmcvfs.mkdirs(path)
|
xbmcvfs.mkdirs(path)
|
||||||
|
@ -384,7 +384,7 @@ def get_credentials():
|
||||||
def save_credentials(credentials):
|
def save_credentials(credentials):
|
||||||
|
|
||||||
credentials = credentials or {}
|
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):
|
if not xbmcvfs.exists(path):
|
||||||
xbmcvfs.mkdirs(path)
|
xbmcvfs.mkdirs(path)
|
||||||
|
|
|
@ -24,7 +24,7 @@ from emby.core.exceptions import HTTPException
|
||||||
|
|
||||||
LOG = logging.getLogger("EMBY."+__name__)
|
LOG = logging.getLogger("EMBY."+__name__)
|
||||||
LIMIT = min(int(settings('limitIndex') or 50), 50)
|
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):
|
class ConnectionManager(object):
|
||||||
|
|
||||||
min_server_version = "3.0.5930"
|
min_server_version = "10.1.0"
|
||||||
server_version = min_server_version
|
server_version = min_server_version
|
||||||
user = {}
|
user = {}
|
||||||
server_id = None
|
server_id = None
|
||||||
|
|
|
@ -18,7 +18,7 @@ from objects import Actions
|
||||||
#################################################################################################
|
#################################################################################################
|
||||||
|
|
||||||
LOG = logging.getLogger("EMBY."+__name__)
|
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 = {
|
OPTIONS = {
|
||||||
'Refresh': _(30410),
|
'Refresh': _(30410),
|
||||||
'Delete': _(30409),
|
'Delete': _(30409),
|
||||||
|
@ -153,7 +153,7 @@ class Context(object):
|
||||||
TheVoid('FavoriteItem', {'ServerId': self.server, 'Id': self.item['Id'], 'Favorite': False})
|
TheVoid('FavoriteItem', {'ServerId': self.server, 'Id': self.item['Id'], 'Favorite': False})
|
||||||
|
|
||||||
elif selected == OPTIONS['Addon']:
|
elif selected == OPTIONS['Addon']:
|
||||||
xbmc.executebuiltin('Addon.OpenSettings(plugin.video.emby)')
|
xbmc.executebuiltin('Addon.OpenSettings(plugin.video.jellyfin)')
|
||||||
|
|
||||||
elif selected == OPTIONS['Delete']:
|
elif selected == OPTIONS['Delete']:
|
||||||
self.delete_item()
|
self.delete_item()
|
||||||
|
|
|
@ -109,7 +109,7 @@ class Events(object):
|
||||||
elif mode == 'removeserver':
|
elif mode == 'removeserver':
|
||||||
event('RemoveServer', {'Id': server})
|
event('RemoveServer', {'Id': server})
|
||||||
elif mode == 'settings':
|
elif mode == 'settings':
|
||||||
xbmc.executebuiltin('Addon.OpenSettings(plugin.video.emby)')
|
xbmc.executebuiltin('Addon.OpenSettings(plugin.video.jellyfin)')
|
||||||
elif mode == 'adduser':
|
elif mode == 'adduser':
|
||||||
add_user()
|
add_user()
|
||||||
elif mode == 'checkupdate':
|
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:
|
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))
|
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:
|
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((_(33136), "RunPlugin(plugin://plugin.video.jellyfin/?mode=updatelib&id=%s)" % view_id))
|
||||||
context.append((_(33132), "RunPlugin(plugin://plugin.video.emby/?mode=repairlib&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.emby/?mode=removelib&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)
|
LOG.debug("--[ listing/%s/%s ] %s", node, label, path)
|
||||||
|
|
||||||
|
@ -177,25 +177,25 @@ def listing():
|
||||||
context = []
|
context = []
|
||||||
|
|
||||||
if server.get('ManualAddress'):
|
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:
|
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:
|
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(_(33194), "plugin://plugin.video.jellyfin/?mode=managelibs", True)
|
||||||
directory(_(33134), "plugin://plugin.video.emby/?mode=addserver", False)
|
directory(_(33134), "plugin://plugin.video.jellyfin/?mode=addserver", False)
|
||||||
directory(_(33054), "plugin://plugin.video.emby/?mode=adduser", False)
|
directory(_(33054), "plugin://plugin.video.jellyfin/?mode=adduser", False)
|
||||||
directory(_(5), "plugin://plugin.video.emby/?mode=settings", False)
|
directory(_(5), "plugin://plugin.video.jellyfin/?mode=settings", False)
|
||||||
directory(_(33058), "plugin://plugin.video.emby/?mode=reset", False)
|
directory(_(33058), "plugin://plugin.video.jellyfin/?mode=reset", False)
|
||||||
directory(_(33192), "plugin://plugin.video.emby/?mode=restartservice", False)
|
directory(_(33192), "plugin://plugin.video.jellyfin/?mode=restartservice", False)
|
||||||
|
|
||||||
if settings('backupPath'):
|
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.setContent(int(sys.argv[1]), 'files')
|
||||||
xbmcplugin.endOfDirectory(int(sys.argv[1]))
|
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):
|
def dir_listitem(label, path, artwork=None, fanart=None):
|
||||||
|
|
||||||
li = xbmcgui.ListItem(label, path=path)
|
li = xbmcgui.ListItem(label, path=path)
|
||||||
li.setThumbnailImage(artwork or "special://home/addons/plugin.video.emby/icon.png")
|
li.setThumbnailImage(artwork or "special://home/addons/plugin.video.jellyfin/icon.png")
|
||||||
li.setArt({"fanart": fanart or "special://home/addons/plugin.video.emby/fanart.jpg"})
|
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.emby/fanart.jpg"})
|
li.setArt({"landscape": artwork or fanart or "special://home/addons/plugin.video.jellyfin/fanart.jpg"})
|
||||||
|
|
||||||
return li
|
return li
|
||||||
|
|
||||||
def manage_libraries():
|
def manage_libraries():
|
||||||
|
|
||||||
directory(_(33098), "plugin://plugin.video.emby/?mode=refreshboxsets", False)
|
directory(_(33098), "plugin://plugin.video.jellyfin/?mode=refreshboxsets", False)
|
||||||
directory(_(33154), "plugin://plugin.video.emby/?mode=addlibs", False)
|
directory(_(33154), "plugin://plugin.video.jellyfin/?mode=addlibs", False)
|
||||||
directory(_(33139), "plugin://plugin.video.emby/?mode=updatelibs", False)
|
directory(_(33139), "plugin://plugin.video.jellyfin/?mode=updatelibs", False)
|
||||||
directory(_(33140), "plugin://plugin.video.emby/?mode=repairlibs", False)
|
directory(_(33140), "plugin://plugin.video.jellyfin/?mode=repairlibs", False)
|
||||||
directory(_(33184), "plugin://plugin.video.emby/?mode=removelibs", False)
|
directory(_(33184), "plugin://plugin.video.jellyfin/?mode=removelibs", False)
|
||||||
directory(_(33060), "plugin://plugin.video.emby/?mode=thememedia", False)
|
directory(_(33060), "plugin://plugin.video.jellyfin/?mode=thememedia", False)
|
||||||
|
|
||||||
xbmcplugin.setContent(int(sys.argv[1]), 'files')
|
xbmcplugin.setContent(int(sys.argv[1]), 'files')
|
||||||
xbmcplugin.endOfDirectory(int(sys.argv[1]))
|
xbmcplugin.endOfDirectory(int(sys.argv[1]))
|
||||||
|
@ -343,16 +343,16 @@ def browse(media, view_id=None, folder=None, server_id=None):
|
||||||
'folder': item['Id'],
|
'folder': item['Id'],
|
||||||
'server': server_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 = []
|
context = []
|
||||||
|
|
||||||
if item['Type'] in ('Series', 'Season', 'Playlist'):
|
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']:
|
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:
|
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)
|
li.addContextMenuItems(context)
|
||||||
list_li.append((path, li, True))
|
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'],
|
'folder': 'genres-%s' % item['Id'],
|
||||||
'server': server_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))
|
list_li.append((path, li, True))
|
||||||
|
|
||||||
else:
|
else:
|
||||||
|
@ -376,14 +376,14 @@ def browse(media, view_id=None, folder=None, server_id=None):
|
||||||
'mode': "play",
|
'mode': "play",
|
||||||
'server': server_id
|
'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)
|
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']:
|
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:
|
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)
|
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],
|
'folder': view_id if node[0] == 'all' else node[0],
|
||||||
'server': server_id
|
'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)
|
directory(node[1] or view['Name'], path)
|
||||||
|
|
||||||
xbmcplugin.setContent(int(sys.argv[1]), 'files')
|
xbmcplugin.setContent(int(sys.argv[1]), 'files')
|
||||||
|
@ -443,7 +443,7 @@ def browse_letters(media, view_id, server_id=None):
|
||||||
'folder': 'firstletter-%s' % node,
|
'folder': 'firstletter-%s' % node,
|
||||||
'server': server_id
|
'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)
|
directory(node, path)
|
||||||
|
|
||||||
xbmcplugin.setContent(int(sys.argv[1]), 'files')
|
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.
|
''' Get extra fanart for listitems. This is called by skinhelper.
|
||||||
Images are stored locally, due to the Kodi caching system.
|
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]
|
item_id = path.split('/')[-2]
|
||||||
|
|
||||||
if not item_id:
|
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
|
''' Returns the video files for the item as plugin listing, can be used
|
||||||
to browse actual files or video extras, etc.
|
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]
|
item_id = path.split('/')[-2]
|
||||||
|
|
||||||
if not item_id:
|
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.
|
#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()
|
emby = embyserver.Read_EmbyServer()
|
||||||
if not embyId:
|
if not embyId:
|
||||||
if "plugin.video.emby" in embyPath:
|
if "plugin.video.jellyfin" in embyPath:
|
||||||
embyId = embyPath.split("/")[-2]
|
embyId = embyPath.split("/")[-2]
|
||||||
if embyId:
|
if embyId:
|
||||||
item = emby.getItem(embyId)
|
item = emby.getItem(embyId)
|
||||||
|
@ -769,7 +769,7 @@ def get_themes():
|
||||||
from helper.playutils import PlayUtils
|
from helper.playutils import PlayUtils
|
||||||
from helper.xmls import tvtunes_nfo
|
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"
|
play = settings('useDirectPaths') == "1"
|
||||||
|
|
||||||
if not xbmcvfs.exists(library + '/'):
|
if not xbmcvfs.exists(library + '/'):
|
||||||
|
@ -863,8 +863,8 @@ def backup():
|
||||||
|
|
||||||
delete_folder(backup)
|
delete_folder(backup)
|
||||||
|
|
||||||
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')
|
||||||
destination_data = os.path.join(backup, "addon_data", "plugin.video.emby")
|
destination_data = os.path.join(backup, "addon_data", "plugin.video.jellyfin")
|
||||||
destination_databases = os.path.join(backup, "Database")
|
destination_databases = os.path.join(backup, "Database")
|
||||||
|
|
||||||
if not xbmcvfs.mkdirs(path) or not xbmcvfs.mkdirs(destination_databases):
|
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)
|
LOG.info("--[ check updates/%s ]", objects.version)
|
||||||
kodi = "DEV" if settings('devMode.bool') else xbmc.getInfoLabel('System.BuildVersion')
|
kodi = "DEV" if settings('devMode.bool') else xbmc.getInfoLabel('System.BuildVersion')
|
||||||
|
# FIXME we do not want their updates
|
||||||
|
return False
|
||||||
try:
|
try:
|
||||||
versions = requests.get('http://kodi.emby.media/Public%20testing/Dependencies/databases.json').json()
|
versions = requests.get('http://kodi.emby.media/Public%20testing/Dependencies/databases.json').json()
|
||||||
build = find(versions, kodi)
|
build = find(versions, kodi)
|
||||||
|
@ -220,10 +221,10 @@ class Service(xbmc.Monitor):
|
||||||
''' All notifications are sent via NotifyAll built-in or Kodi.
|
''' All notifications are sent via NotifyAll built-in or Kodi.
|
||||||
Central hub.
|
Central hub.
|
||||||
'''
|
'''
|
||||||
if sender.lower() not in ('plugin.video.emby', 'xbmc'):
|
if sender.lower() not in ('plugin.video.jellyfin', 'xbmc'):
|
||||||
return
|
return
|
||||||
|
|
||||||
if sender == 'plugin.video.emby':
|
if sender == 'plugin.video.jellyfin':
|
||||||
method = method.split('.')[1]
|
method = method.split('.')[1]
|
||||||
|
|
||||||
if method not in ('ServerUnreachable', 'ServerShuttingDown', 'UserDataChanged', 'ServerConnect',
|
if method not in ('ServerUnreachable', 'ServerShuttingDown', 'UserDataChanged', 'ServerConnect',
|
||||||
|
|
|
@ -503,7 +503,7 @@ class PlayUtils(object):
|
||||||
''' Download external subtitles to temp folder
|
''' Download external subtitles to temp folder
|
||||||
to be able to have proper names to streams.
|
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):
|
if not xbmcvfs.exists(temp):
|
||||||
xbmcvfs.mkdir(temp)
|
xbmcvfs.mkdir(temp)
|
||||||
|
|
|
@ -22,7 +22,7 @@ def _(string):
|
||||||
if type(string) != int:
|
if type(string) != int:
|
||||||
string = STRINGS[string]
|
string = STRINGS[string]
|
||||||
|
|
||||||
result = xbmcaddon.Addon('plugin.video.emby').getLocalizedString(string)
|
result = xbmcaddon.Addon('plugin.video.jellyfin').getLocalizedString(string)
|
||||||
|
|
||||||
if not result:
|
if not result:
|
||||||
result = xbmc.getLocalizedString(string)
|
result = xbmc.getLocalizedString(string)
|
||||||
|
|
|
@ -26,7 +26,7 @@ LOG = logging.getLogger("EMBY."+__name__)
|
||||||
#################################################################################################
|
#################################################################################################
|
||||||
|
|
||||||
def addon_id():
|
def addon_id():
|
||||||
return "plugin.video.emby"
|
return "plugin.video.jellyfin"
|
||||||
|
|
||||||
def kodi_version():
|
def kodi_version():
|
||||||
return xbmc.getInfoLabel('System.BuildVersion')[:2]
|
return xbmc.getInfoLabel('System.BuildVersion')[:2]
|
||||||
|
@ -134,7 +134,7 @@ def event(method, data=None, sender=None, hexlify=False):
|
||||||
''' Data is a dictionary.
|
''' Data is a dictionary.
|
||||||
'''
|
'''
|
||||||
data = data or {}
|
data = data or {}
|
||||||
sender = sender or "plugin.video.emby"
|
sender = sender or "plugin.video.jellyfin"
|
||||||
|
|
||||||
if hexlify:
|
if hexlify:
|
||||||
data = '\\"[\\"{0}\\"]\\"'.format(binascii.hexlify(json.dumps(data)))
|
data = '\\"[\\"{0}\\"]\\"'.format(binascii.hexlify(json.dumps(data)))
|
||||||
|
@ -150,7 +150,7 @@ def dialog(dialog_type, *args, **kwargs):
|
||||||
|
|
||||||
if "icon" in kwargs:
|
if "icon" in kwargs:
|
||||||
kwargs['icon'] = kwargs['icon'].replace("{emby}",
|
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:
|
if "heading" in kwargs:
|
||||||
kwargs['heading'] = kwargs['heading'].replace("{emby}", _('addon_name'))
|
kwargs['heading'] = kwargs['heading'].replace("{emby}", _('addon_name'))
|
||||||
|
|
||||||
|
|
|
@ -50,10 +50,10 @@ class Monitor(xbmc.Monitor):
|
||||||
|
|
||||||
def onNotification(self, sender, method, data):
|
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
|
return
|
||||||
|
|
||||||
if sender == 'plugin.video.emby':
|
if sender == 'plugin.video.jellyfin':
|
||||||
method = method.split('.')[1]
|
method = method.split('.')[1]
|
||||||
|
|
||||||
if method not in ('GetItem', 'ReportProgressRequested', 'LoadServer', 'RandomItems', 'Recommended',
|
if method not in ('GetItem', 'ReportProgressRequested', 'LoadServer', 'RandomItems', 'Recommended',
|
||||||
|
@ -69,7 +69,7 @@ class Monitor(xbmc.Monitor):
|
||||||
elif sender.startswith('upnextprovider'):
|
elif sender.startswith('upnextprovider'):
|
||||||
method = method.split('.')[1]
|
method = method.split('.')[1]
|
||||||
|
|
||||||
if method not in ('plugin.video.emby_play_action'):
|
if method not in ('plugin.video.jellyfin_play_action'):
|
||||||
return
|
return
|
||||||
|
|
||||||
data = json.loads(data)
|
data = json.loads(data)
|
||||||
|
@ -312,7 +312,7 @@ class Monitor(xbmc.Monitor):
|
||||||
"Mute,Unmute,SetVolume,"
|
"Mute,Unmute,SetVolume,"
|
||||||
"Play,Playstate,PlayNext,PlayMediaSource"
|
"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)
|
session = server['api'].get_device(self.device_id)
|
||||||
|
|
|
@ -215,7 +215,7 @@ class Actions(object):
|
||||||
LOG.info("[ playlist/%s ] %s", item['Id'], item['Name'])
|
LOG.info("[ playlist/%s ] %s", item['Id'], item['Name'])
|
||||||
|
|
||||||
self.set_listitem(item, listitem, None, False)
|
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)
|
listitem.setPath(path)
|
||||||
|
|
||||||
playlist.add(path, listitem, index)
|
playlist.add(path, listitem, index)
|
||||||
|
@ -312,9 +312,9 @@ class Actions(object):
|
||||||
obj['Artwork']['Thumb'] = obj['Artwork']['Thumb'] or ""
|
obj['Artwork']['Thumb'] = obj['Artwork']['Thumb'] or ""
|
||||||
|
|
||||||
if not intro and not obj['Type'] == 'Trailer':
|
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:
|
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']['Primary'] += "&KodiTrailer=true" if obj['Type'] == 'Trailer' else "&KodiCinemaMode=true"
|
||||||
obj['Artwork']['Backdrop'] = [obj['Artwork']['Primary']]
|
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['Runtime'] = round(float((obj['Runtime'] or 0) / 10000000.0), 6)
|
||||||
obj['PlayCount'] = API.get_playcount(obj['Played'], obj['PlayCount']) or 0
|
obj['PlayCount'] = API.get_playcount(obj['Played'], obj['PlayCount']) or 0
|
||||||
obj['Overlay'] = 7 if obj['Played'] else 6
|
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']['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.emby/fanart.jpg"
|
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.emby/fanart.jpg"]
|
obj['Artwork']['Backdrop'] = obj['Artwork']['Backdrop'] or ["special://home/addons/plugin.video.jellyfin/fanart.jpg"]
|
||||||
|
|
||||||
|
|
||||||
metadata = {
|
metadata = {
|
||||||
|
@ -657,7 +657,7 @@ class Actions(object):
|
||||||
''' Base resume dialog based on Kodi settings.
|
''' Base resume dialog based on Kodi settings.
|
||||||
'''
|
'''
|
||||||
LOG.info("Resume dialog called.")
|
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 = resume.ResumeDialog("script-emby-resume.xml", *XML_PATH)
|
||||||
dialog.set_resume_point("Resume from %s" % str(timedelta(seconds=seektime)).split(".")[0])
|
dialog.set_resume_point("Resume from %s" % str(timedelta(seconds=seektime)).split(".")[0])
|
||||||
|
|
|
@ -169,7 +169,7 @@ class Movies(KodiDb):
|
||||||
if obj['LocalTrailer']:
|
if obj['LocalTrailer']:
|
||||||
|
|
||||||
trailer = self.server['api'].get_local_trailers(obj['Id'])
|
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']:
|
elif obj['Trailer']:
|
||||||
obj['Trailer'] = "plugin://plugin.video.youtube/play/?video_id=%s" % obj['Trailer'].rsplit('=', 1)[1]
|
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'], "")
|
obj['Path'] = obj['Path'].replace(obj['Filename'], "")
|
||||||
|
|
||||||
else:
|
else:
|
||||||
obj['Path'] = "plugin://plugin.video.emby.movies/"
|
obj['Path'] = "plugin://plugin.video.jellyfin/"
|
||||||
params = {
|
params = {
|
||||||
'filename': obj['Filename'].encode('utf-8'),
|
'filename': obj['Filename'].encode('utf-8'),
|
||||||
'id': obj['Id'],
|
'id': obj['Id'],
|
||||||
|
|
|
@ -174,7 +174,7 @@ class MusicVideos(KodiDb):
|
||||||
obj['Path'] = obj['Path'].replace(obj['Filename'], "")
|
obj['Path'] = obj['Path'].replace(obj['Filename'], "")
|
||||||
|
|
||||||
else:
|
else:
|
||||||
obj['Path'] = "plugin://plugin.video.emby.musicvideos/"
|
obj['Path'] = "plugin://plugin.video.jellyfin/"
|
||||||
params = {
|
params = {
|
||||||
'filename': obj['Filename'].encode('utf-8'),
|
'filename': obj['Filename'].encode('utf-8'),
|
||||||
'id': obj['Id'],
|
'id': obj['Id'],
|
||||||
|
|
|
@ -217,7 +217,7 @@ class TVShows(KodiDb):
|
||||||
if not validate(obj['Path']):
|
if not validate(obj['Path']):
|
||||||
raise Exception("Failed to validate path. User stopped.")
|
raise Exception("Failed to validate path. User stopped.")
|
||||||
else:
|
else:
|
||||||
obj['TopLevel'] = "plugin://plugin.video.emby.tvshows/"
|
obj['TopLevel'] = "plugin://plugin.video.jellyfin/"
|
||||||
obj['Path'] = "%s%s/" % (obj['TopLevel'], obj['Id'])
|
obj['Path'] = "%s%s/" % (obj['TopLevel'], obj['Id'])
|
||||||
|
|
||||||
|
|
||||||
|
@ -354,7 +354,7 @@ class TVShows(KodiDb):
|
||||||
if not self.direct_path and obj['Resume']:
|
if not self.direct_path and obj['Resume']:
|
||||||
|
|
||||||
temp_obj = dict(obj)
|
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['PathId'] = self.get_path(*values(temp_obj, QU.get_path_obj))
|
||||||
temp_obj['FileId'] = self.add_file(*values(temp_obj, QU.add_file_obj))
|
temp_obj['FileId'] = self.add_file(*values(temp_obj, QU.add_file_obj))
|
||||||
self.update_file(*values(temp_obj, QU.update_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'], "")
|
obj['Path'] = obj['Path'].replace(obj['Filename'], "")
|
||||||
else:
|
else:
|
||||||
obj['Path'] = "plugin://plugin.video.emby.tvshows/%s/" % obj['SeriesId']
|
obj['Path'] = "plugin://plugin.video.jellyfin/%s/" % obj['SeriesId']
|
||||||
params = {
|
params = {
|
||||||
'filename': obj['Filename'].encode('utf-8'),
|
'filename': obj['Filename'].encode('utf-8'),
|
||||||
'id': obj['Id'],
|
'id': obj['Id'],
|
||||||
|
@ -493,14 +493,14 @@ class TVShows(KodiDb):
|
||||||
|
|
||||||
temp_obj = dict(obj)
|
temp_obj = dict(obj)
|
||||||
temp_obj['Filename'] = self.get_filename(*values(temp_obj, QU.get_file_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))
|
self.remove_file(*values(temp_obj, QU.delete_file_obj))
|
||||||
|
|
||||||
elif not self.direct_path and obj['Resume']:
|
elif not self.direct_path and obj['Resume']:
|
||||||
|
|
||||||
temp_obj = dict(obj)
|
temp_obj = dict(obj)
|
||||||
temp_obj['Filename'] = self.get_filename(*values(temp_obj, QU.get_file_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))
|
temp_obj['FileId'] = self.add_file(*values(temp_obj, QU.add_file_obj))
|
||||||
self.update_file(*values(temp_obj, QU.update_file_obj))
|
self.update_file(*values(temp_obj, QU.update_file_obj))
|
||||||
self.add_playstate(*values(temp_obj, QU.add_bookmark_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'])
|
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):
|
if xbmcvfs.exists(path):
|
||||||
dirs, files = xbmcvfs.listdir(path)
|
dirs, files = xbmcvfs.listdir(path)
|
||||||
|
|
|
@ -359,7 +359,7 @@ class Views(object):
|
||||||
else:
|
else:
|
||||||
element = etree.Element('node', {'order': str(index), 'type': "folder"})
|
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
|
return element
|
||||||
|
|
||||||
|
@ -877,7 +877,7 @@ class Views(object):
|
||||||
'mode': "nextepisodes",
|
'mode': "nextepisodes",
|
||||||
'limit': self.limit
|
'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):
|
def window_browse(self, view, node=None):
|
||||||
|
|
||||||
|
@ -892,7 +892,7 @@ class Views(object):
|
||||||
if node:
|
if node:
|
||||||
params['folder'] = 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):
|
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)
|
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))
|
% (params.get('Id'), params.get('KodiId'), params.get('Name'), params.get('transcode') or False))
|
||||||
|
|
||||||
self.send_response(200)
|
self.send_response(200)
|
||||||
|
|
|
@ -5,11 +5,11 @@
|
||||||
<setting label="30003" id="idMethod" type="enum" values="Manual|Emby Connect" default="0" />
|
<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="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="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="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.emby?mode=connect)" visible="eq(-4,1) + !eq(-2,)" 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="30001" id="serverName" type="text" default="" />
|
||||||
<setting label="30000" id="server" type="text" default="" visible="true" />
|
<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 label="30500" id="sslverify" type="bool" default="true" visible="true" />
|
||||||
|
|
||||||
<setting type="sep" />
|
<setting type="sep" />
|
||||||
|
@ -92,19 +92,19 @@
|
||||||
<category label="30022"><!-- Advanced -->
|
<category label="30022"><!-- Advanced -->
|
||||||
<setting label="30004" id="logLevel" type="enum" values="Disabled|Info|Debug" default="1" />
|
<setting label="30004" id="logLevel" type="enum" values="Disabled|Info|Debug" default="1" />
|
||||||
<setting label="33164" id="maskInfo" type="bool" default="true" />
|
<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="30239" type="action" action="RunPlugin(plugin://plugin.video.jellyfin?mode=reset)" option="close" />
|
||||||
<setting label="30535" type="action" action="RunPlugin(plugin://plugin.video.emby?mode=deviceid)" option="close" />
|
<setting label="30535" type="action" action="RunPlugin(plugin://plugin.video.jellyfin?mode=deviceid)" option="close" />
|
||||||
<setting label="33196" type="lsep" />
|
<setting label="33196" type="lsep" />
|
||||||
<setting label="33195" id="enableAddon" type="bool" default="true" />
|
<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="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 label="Developer mode" id="devMode" type="bool" default="false" />
|
||||||
|
|
||||||
<setting type="sep" />
|
<setting type="sep" />
|
||||||
<setting label="33104" type="lsep"/>
|
<setting label="33104" type="lsep"/>
|
||||||
<setting label="33093" type="folder" id="backupPath" option="writeable" />
|
<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>
|
</category>
|
||||||
|
|
||||||
</settings>
|
</settings>
|
||||||
|
|
|
@ -57,12 +57,12 @@
|
||||||
<font>font13</font>
|
<font>font13</font>
|
||||||
<textcolor>white</textcolor>
|
<textcolor>white</textcolor>
|
||||||
<textshadow>66000000</textshadow>
|
<textshadow>66000000</textshadow>
|
||||||
<label>[B]$ADDON[plugin.video.emby 30612][/B]</label>
|
<label>[B]$ADDON[plugin.video.jellyfin 30612][/B]</label>
|
||||||
</control>
|
</control>
|
||||||
<control type="group" id="101">
|
<control type="group" id="101">
|
||||||
<height>110</height>
|
<height>110</height>
|
||||||
<control type="label">
|
<control type="label">
|
||||||
<label>$ADDON[plugin.video.emby 30024]</label>
|
<label>$ADDON[plugin.video.jellyfin 30024]</label>
|
||||||
<textcolor>ffe1e1e1</textcolor>
|
<textcolor>ffe1e1e1</textcolor>
|
||||||
<shadowcolor>66000000</shadowcolor>
|
<shadowcolor>66000000</shadowcolor>
|
||||||
<font>font12</font>
|
<font>font12</font>
|
||||||
|
@ -83,7 +83,7 @@
|
||||||
<control type="group" id="102">
|
<control type="group" id="102">
|
||||||
<height>110</height>
|
<height>110</height>
|
||||||
<control type="label">
|
<control type="label">
|
||||||
<label>$ADDON[plugin.video.emby 30602]</label>
|
<label>$ADDON[plugin.video.jellyfin 30602]</label>
|
||||||
<textcolor>ffe1e1e1</textcolor>
|
<textcolor>ffe1e1e1</textcolor>
|
||||||
<textshadow>66000000</textshadow>
|
<textshadow>66000000</textshadow>
|
||||||
<font>font12</font>
|
<font>font12</font>
|
||||||
|
@ -103,7 +103,7 @@
|
||||||
</control>
|
</control>
|
||||||
</control>
|
</control>
|
||||||
<control type="button" id="200">
|
<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>
|
<width>426</width>
|
||||||
<height>65</height>
|
<height>65</height>
|
||||||
<font>font13</font>
|
<font>font13</font>
|
||||||
|
@ -121,7 +121,7 @@
|
||||||
<animation effect="slide" time="0" end="17,0" condition="true">Conditional</animation>
|
<animation effect="slide" time="0" end="17,0" condition="true">Conditional</animation>
|
||||||
</control>
|
</control>
|
||||||
<control type="button" id="201">
|
<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>
|
<width>426</width>
|
||||||
<height>65</height>
|
<height>65</height>
|
||||||
<font>font13</font>
|
<font>font13</font>
|
||||||
|
|
|
@ -56,12 +56,12 @@
|
||||||
<font>font13</font>
|
<font>font13</font>
|
||||||
<textcolor>white</textcolor>
|
<textcolor>white</textcolor>
|
||||||
<textshadow>66000000</textshadow>
|
<textshadow>66000000</textshadow>
|
||||||
<label>[B]$ADDON[plugin.video.emby 30612][/B]</label>
|
<label>[B]$ADDON[plugin.video.jellyfin 30612][/B]</label>
|
||||||
</control>
|
</control>
|
||||||
<control type="group" id="101">
|
<control type="group" id="101">
|
||||||
<height>110</height>
|
<height>110</height>
|
||||||
<control type="label">
|
<control type="label">
|
||||||
<label>$ADDON[plugin.video.emby 30024]</label>
|
<label>$ADDON[plugin.video.jellyfin 30024]</label>
|
||||||
<textcolor>ffe1e1e1</textcolor>
|
<textcolor>ffe1e1e1</textcolor>
|
||||||
<shadowcolor>66000000</shadowcolor>
|
<shadowcolor>66000000</shadowcolor>
|
||||||
<font>font12</font>
|
<font>font12</font>
|
||||||
|
@ -82,7 +82,7 @@
|
||||||
<control type="group" id="102">
|
<control type="group" id="102">
|
||||||
<height>110</height>
|
<height>110</height>
|
||||||
<control type="label">
|
<control type="label">
|
||||||
<label>$ADDON[plugin.video.emby 30602]</label>
|
<label>$ADDON[plugin.video.jellyfin 30602]</label>
|
||||||
<textcolor>ffe1e1e1</textcolor>
|
<textcolor>ffe1e1e1</textcolor>
|
||||||
<textshadow>66000000</textshadow>
|
<textshadow>66000000</textshadow>
|
||||||
<font>font12</font>
|
<font>font12</font>
|
||||||
|
@ -102,7 +102,7 @@
|
||||||
</control>
|
</control>
|
||||||
</control>
|
</control>
|
||||||
<control type="button" id="200">
|
<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>
|
<width>426</width>
|
||||||
<height>65</height>
|
<height>65</height>
|
||||||
<font>font13</font>
|
<font>font13</font>
|
||||||
|
@ -119,7 +119,7 @@
|
||||||
<animation effect="slide" time="0" end="17,0" condition="true">Conditional</animation>
|
<animation effect="slide" time="0" end="17,0" condition="true">Conditional</animation>
|
||||||
</control>
|
</control>
|
||||||
<control type="button" id="201">
|
<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>
|
<width>426</width>
|
||||||
<height>65</height>
|
<height>65</height>
|
||||||
<font>font13</font>
|
<font>font13</font>
|
||||||
|
@ -141,7 +141,7 @@
|
||||||
</control>
|
</control>
|
||||||
<control type="group">
|
<control type="group">
|
||||||
<control type="label">
|
<control type="label">
|
||||||
<label>$ADDON[plugin.video.emby 30603]</label>
|
<label>$ADDON[plugin.video.jellyfin 30603]</label>
|
||||||
<font>font_flag</font>
|
<font>font_flag</font>
|
||||||
<textcolor>ff464646</textcolor>
|
<textcolor>ff464646</textcolor>
|
||||||
<shadowcolor>66000000</shadowcolor>
|
<shadowcolor>66000000</shadowcolor>
|
||||||
|
@ -165,7 +165,7 @@
|
||||||
<control type="label">
|
<control type="label">
|
||||||
<top>135</top>
|
<top>135</top>
|
||||||
<align>center</align>
|
<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>
|
<font>font_flag</font>
|
||||||
<scroll>true</scroll>
|
<scroll>true</scroll>
|
||||||
<textcolor>FF52b54b</textcolor>
|
<textcolor>FF52b54b</textcolor>
|
||||||
|
|
|
@ -57,12 +57,12 @@
|
||||||
<font>font13</font>
|
<font>font13</font>
|
||||||
<textcolor>white</textcolor>
|
<textcolor>white</textcolor>
|
||||||
<textshadow>66000000</textshadow>
|
<textshadow>66000000</textshadow>
|
||||||
<label>[B]$ADDON[plugin.video.emby 30614][/B]</label>
|
<label>[B]$ADDON[plugin.video.jellyfin 30614][/B]</label>
|
||||||
</control>
|
</control>
|
||||||
<control type="group" id="101">
|
<control type="group" id="101">
|
||||||
<height>110</height>
|
<height>110</height>
|
||||||
<control type="label">
|
<control type="label">
|
||||||
<label>$ADDON[plugin.video.emby 30615]</label>
|
<label>$ADDON[plugin.video.jellyfin 30615]</label>
|
||||||
<textcolor>ffe1e1e1</textcolor>
|
<textcolor>ffe1e1e1</textcolor>
|
||||||
<shadowcolor>66000000</shadowcolor>
|
<shadowcolor>66000000</shadowcolor>
|
||||||
<font>font12</font>
|
<font>font12</font>
|
||||||
|
@ -83,7 +83,7 @@
|
||||||
<control type="group" id="102">
|
<control type="group" id="102">
|
||||||
<height>110</height>
|
<height>110</height>
|
||||||
<control type="label">
|
<control type="label">
|
||||||
<label>$ADDON[plugin.video.emby 30030]</label>
|
<label>$ADDON[plugin.video.jellyfin 30030]</label>
|
||||||
<textcolor>ffe1e1e1</textcolor>
|
<textcolor>ffe1e1e1</textcolor>
|
||||||
<textshadow>66000000</textshadow>
|
<textshadow>66000000</textshadow>
|
||||||
<font>font12</font>
|
<font>font12</font>
|
||||||
|
@ -103,7 +103,7 @@
|
||||||
</control>
|
</control>
|
||||||
</control>
|
</control>
|
||||||
<control type="button" id="200">
|
<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>
|
<width>426</width>
|
||||||
<height>65</height>
|
<height>65</height>
|
||||||
<font>font13</font>
|
<font>font13</font>
|
||||||
|
@ -120,7 +120,7 @@
|
||||||
<animation effect="slide" time="0" end="17,0" condition="true">Conditional</animation>
|
<animation effect="slide" time="0" end="17,0" condition="true">Conditional</animation>
|
||||||
</control>
|
</control>
|
||||||
<control type="button" id="201">
|
<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>
|
<width>426</width>
|
||||||
<height>65</height>
|
<height>65</height>
|
||||||
<font>font13</font>
|
<font>font13</font>
|
||||||
|
|
|
@ -64,7 +64,7 @@
|
||||||
<font>font13</font>
|
<font>font13</font>
|
||||||
<textcolor>white</textcolor>
|
<textcolor>white</textcolor>
|
||||||
<textshadow>66000000</textshadow>
|
<textshadow>66000000</textshadow>
|
||||||
<label>[B]$ADDON[plugin.video.emby 30607][/B]</label>
|
<label>[B]$ADDON[plugin.video.jellyfin 30607][/B]</label>
|
||||||
</control>
|
</control>
|
||||||
<control type="group" id="101">
|
<control type="group" id="101">
|
||||||
<height>200</height>
|
<height>200</height>
|
||||||
|
@ -161,7 +161,7 @@
|
||||||
<height>20</height>
|
<height>20</height>
|
||||||
</control>
|
</control>
|
||||||
<control type="button" id="205">
|
<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>
|
<width>476</width>
|
||||||
<height>65</height>
|
<height>65</height>
|
||||||
<font>font13</font>
|
<font>font13</font>
|
||||||
|
@ -179,7 +179,7 @@
|
||||||
<animation effect="slide" time="0" end="17,0" condition="true">Conditional</animation>
|
<animation effect="slide" time="0" end="17,0" condition="true">Conditional</animation>
|
||||||
</control>
|
</control>
|
||||||
<control type="button" id="206">
|
<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>
|
<width>476</width>
|
||||||
<height>65</height>
|
<height>65</height>
|
||||||
<font>font13</font>
|
<font>font13</font>
|
||||||
|
@ -197,7 +197,7 @@
|
||||||
<animation effect="slide" time="0" end="17,0" condition="true">Conditional</animation>
|
<animation effect="slide" time="0" end="17,0" condition="true">Conditional</animation>
|
||||||
</control>
|
</control>
|
||||||
<control type="button" id="201">
|
<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>
|
<width>476</width>
|
||||||
<height>65</height>
|
<height>65</height>
|
||||||
<font>font13</font>
|
<font>font13</font>
|
||||||
|
|
|
@ -57,7 +57,7 @@
|
||||||
<font>font13</font>
|
<font>font13</font>
|
||||||
<textcolor>white</textcolor>
|
<textcolor>white</textcolor>
|
||||||
<textshadow>66000000</textshadow>
|
<textshadow>66000000</textshadow>
|
||||||
<label>[B]$ADDON[plugin.video.emby 30612][/B]</label>
|
<label>[B]$ADDON[plugin.video.jellyfin 30612][/B]</label>
|
||||||
</control>
|
</control>
|
||||||
<control type="list" id="155">
|
<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>
|
<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>
|
</focusedlayout>
|
||||||
</control>
|
</control>
|
||||||
<control type="button" id="200">
|
<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>
|
<width>874</width>
|
||||||
<height>65</height>
|
<height>65</height>
|
||||||
<font>font13</font>
|
<font>font13</font>
|
||||||
|
@ -193,7 +193,7 @@
|
||||||
<animation effect="slide" time="0" end="17,0" condition="true">Conditional</animation>
|
<animation effect="slide" time="0" end="17,0" condition="true">Conditional</animation>
|
||||||
</control>
|
</control>
|
||||||
<control type="button" id="201">
|
<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>
|
<width>874</width>
|
||||||
<height>65</height>
|
<height>65</height>
|
||||||
<font>font13</font>
|
<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')
|
__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')
|
__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')
|
__pcache__ = xbmc.translatePath(os.path.join(__addon__.getAddonInfo('profile'), 'emby')).decode('utf-8')
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue