def linkEmbyConnect(handle, _): # retrieve the media provider mediaProvider = xbmcmediaimport.getProvider(handle) if not mediaProvider: log('cannot retrieve media provider', xbmc.LOGERROR) return # get the media provider settings providerSettings = mediaProvider.prepareSettings() if not providerSettings: return # make sure we have a valid device ID deviceId = providerSettings.getString(emby.constants.SETTING_PROVIDER_DEVICEID) if not deviceId: deviceId = Request.GenerateDeviceId() providerSettings.setString(emby.constants.SETTING_PROVIDER_DEVICEID, deviceId) embyConnect = linkToEmbyConnect(deviceId) if not embyConnect: return # make sure the configured Emby server is still accessible serverUrl = ProviderSettings.GetUrl(providerSettings) matchingServer = None serverId = Server.GetServerId(mediaProvider.getIdentifier()) # get all connected servers servers = EmbyConnect.GetServers(embyConnect.accessToken, embyConnect.userId) if not servers: log('no servers available for Emby Connect user id {}'.format(embyConnect.userId), xbmc.LOGWARNING) return for server in servers: if server.systemId == serverId: matchingServer = server break if not matchingServer: log('no Emby server matching {} found'.format(serverUrl), xbmc.LOGWARNING) xbmcgui.Dialog().ok(localise(32038), localise(32061)) return # change the settings providerSettings.setString(emby.constants.SETTING_PROVIDER_EMBY_CONNECT_USER_ID, embyConnect.userId) providerSettings.setString(emby.constants.SETTING_PROVIDER_EMBY_CONNECT_ACCESS_KEY, matchingServer.accessKey) success = False try: success = Server(mediaProvider).Authenticate(force=True) except: pass if success: xbmcgui.Dialog().ok(localise(32038), localise(32062)) log('successfully linked to Emby Connect server {} ({}) {}'.format(matchingServer.name, serverId, serverUrl)) else: xbmcgui.Dialog().ok(localise(32038), localise(32061)) log('failed to link to Emby Connect server {} ({}) {}'.format(matchingServer.name, serverId, serverUrl), xbmc.LOGWARNING)
def downloadIcon(mediaProvider): if not mediaProvider: raise ValueError('invalid mediaProvider') try: basePath = xbmc.translatePath(__addon__.getAddonInfo('profile')).decode('utf-8') except AttributeError: basePath = xbmc.translatePath(__addon__.getAddonInfo('profile')) # determine the icon's URL on the media provider iconUrl = Server.BuildIconUrl(mediaProvider.getBasePath()) # make sure the addon data directory exists if not xbmcvfs.exists(basePath): if not Api._makeDir(basePath): log('failed to create addon data directory at {}'.format(basePath), xbmc.LOGWARNING) return iconUrl # generate the icon's local path serverId = Server.GetServerId(mediaProvider.getIdentifier()) iconPath = os.path.join(basePath, '{}.png'.format(serverId)) # try to download the icon (since Emby's webserver doesn't support HEAD requests) try: urlretrieve(iconUrl, iconPath) except IOError as err: log('failed to download icon for {} from {}: {}'.format(mediaProvider2str(mediaProvider), iconUrl, err), xbmc.LOGWARNING) return iconUrl return iconPath
def canImport(handle, options): if not 'path' in options: log('cannot execute "canimport" without path') return path = unquote(options['path'][0]) # try to get the emby server's identifier from the path id = Server.GetServerId(path) if not id: return xbmcmediaimport.setCanImport(handle, True)