1from loguru import logger 2 3from flexget import entry, plugin 4from flexget.components.emby.api_emby import EmbyApi, EmbyAuth 5from flexget.components.emby.emby_util import SCHEMA_SERVER, get_field_map 6from flexget.event import event 7 8logger = logger.bind(name='emby_lookup') 9 10 11class EmbyLookup: 12 """ 13 Preforms Emby Lookup 14 15 Example: 16 emby_lookup: 17 host: http://localhost:8096 18 username: <username> 19 apikey: <apikey> 20 return_host: wan 21 """ 22 23 auth = {} 24 25 schema = {**SCHEMA_SERVER} 26 27 def on_task_start(self, task, config): 28 if not isinstance(config, dict): 29 config = {} 30 31 self.auth = EmbyAuth(**config) 32 33 try: 34 self.auth.login(False) 35 except plugin.PluginError as e: 36 logger.error('Not possible to login to emby: {}', e) 37 38 @entry.register_lazy_lookup('emby_lookup') 39 def lazy_loader(self, entry, auth): 40 if not auth: 41 return 42 43 if not auth.logged: 44 auth.login() 45 46 emby_api = EmbyApi(auth) 47 emby_data = emby_api.search(**entry) 48 49 if not emby_data: 50 return 51 52 emby_type = EmbyApi.get_type(**emby_data) 53 54 lazy_fields = get_field_map(media_type=emby_type) 55 if not lazy_fields: 56 return 57 58 entry.update_using_map(lazy_fields, emby_data, ignore_none=True) 59 60 def add_lazy(self, entry, media_type): 61 lazy_fields = get_field_map(media_type=media_type) 62 63 entry.add_lazy_fields(self.lazy_loader, lazy_fields, kwargs={'auth': self.auth}) 64 65 entry['emby_server_id'] = self.auth.server_id 66 entry['emby_username'] = self.auth.username 67 entry['emby_user_id'] = self.auth.uid 68 69 # Run after series and metainfo series and imdb 70 @plugin.priority(110) 71 def on_task_metainfo(self, task, config): 72 if not config: 73 return 74 75 for entry in task.entries: 76 self.add_lazy(entry, EmbyApi.get_type(**entry)) 77 78 @property 79 def movie_identifier(self): 80 """Returns the plugin main identifier type""" 81 return 'emby_movie_id' 82 83 @property 84 def series_identifier(self): 85 """Returns the plugin main identifier type""" 86 return 'emby_serie_id' 87 88 89@event('plugin.register') 90def register_plugin(): 91 plugin.register( 92 EmbyLookup, 93 'emby_lookup', 94 api_ver=2, 95 interfaces=['task', 'series_metainfo', 'movie_metainfo'], 96 ) 97