# -*- coding: utf-8 -*- ################################################################################################# import logging import os import sys import urlparse import xbmc import xbmcaddon ################################################################################################# _ADDON = xbmcaddon.Addon(id='plugin.video.emby') _CWD = _ADDON.getAddonInfo('path').decode('utf-8') _BASE_LIB = xbmc.translatePath(os.path.join(_CWD, 'resources', 'lib')).decode('utf-8') sys.path.append(_BASE_LIB) ################################################################################################# import entrypoint import loghandler from utils import window, dialog, language as lang ################################################################################################# loghandler.config() log = logging.getLogger("EMBY.default") ################################################################################################# class Main(object): # MAIN ENTRY POINT #@utils.profiling() def __init__(self): # Parse parameters base_url = sys.argv[0] path = sys.argv[2] params = urlparse.parse_qs(path[1:]) log.warn("Parameter string: %s", path) try: mode = params['mode'][0] except (IndexError, KeyError): mode = "" if "/extrafanart" in base_url: emby_path = path[1:] emby_id = params.get('id', [""])[0] entrypoint.getExtraFanArt(emby_id, emby_path) elif "/Extras" in base_url or "/VideoFiles" in base_url: emby_path = path[1:] emby_id = params.get('id', [""])[0] entrypoint.getVideoFiles(emby_id, emby_path) elif not self._modes(mode, params): # Other functions if mode == 'settings': xbmc.executebuiltin('Addon.OpenSettings(plugin.video.emby)') elif mode in ('manualsync', 'fastsync', 'repair'): self._library_sync(mode) elif mode == 'texturecache': import artwork artwork.Artwork().fullTextureCacheSync() else: entrypoint.doMainListing() @classmethod def _modes(cls, mode, params): import utils modes = { 'reset': utils.reset, 'resetauth': entrypoint.resetAuth, 'play': entrypoint.doPlayback, 'passwords': utils.passwordsXML, 'adduser': entrypoint.addUser, 'thememedia': entrypoint.getThemeMedia, 'channels': entrypoint.BrowseChannels, 'channelsfolder': entrypoint.BrowseChannels, 'browsecontent': entrypoint.BrowseContent, 'getsubfolders': entrypoint.GetSubFolders, 'nextup': entrypoint.getNextUpEpisodes, 'inprogressepisodes': entrypoint.getInProgressEpisodes, 'recentepisodes': entrypoint.getRecentEpisodes, 'refreshplaylist': entrypoint.refreshPlaylist, 'deviceid': entrypoint.resetDeviceId, 'delete': entrypoint.deleteItem, 'connect': entrypoint.emby_connect } if mode in modes: # Simple functions action = modes[mode] item_id = params.get('id') if item_id: item_id = item_id[0] if mode == 'play': database_id = params.get('dbid') action(item_id, database_id) elif mode in ('nextup', 'inprogressepisodes', 'recentepisodes'): limit = int(params['limit'][0]) action(item_id, limit) elif mode in ('channels', 'getsubfolders'): action(item_id) elif mode == 'browsecontent': action(item_id, params.get('type', [""])[0], params.get('folderid', [""])[0]) elif mode == 'channelsfolder': folderid = params['folderid'][0] action(item_id, folderid) else: action() return True return False @classmethod def _library_sync(cls, mode): if window('emby_online') != "true": # Server is not online, do not run the sync dialog(type_="ok", heading="{emby}", line1=lang(33034)) log.warn("Not connected to the emby server.") elif window('emby_dbScan') != "true": import librarysync library_sync = librarysync.LibrarySync() if mode == 'manualsync': librarysync.ManualSync().sync() elif mode == 'fastsync': library_sync.startSync() else: library_sync.fullSync(repair=True) else: log.warn("Database scan is already running.") if __name__ == "__main__": log.info("plugin.video.emby started") Main() log.info("plugin.video.emby stopped")