def run(self): count = 0 with requests.Session() as s: while True: try: item_ids = self.queue.get(timeout=1) except Queue.Empty: LOG.info("--<[ q:download/%s/%s ]", id(self), count) LOG.info("--[ q:download/remove ] %s", self.removed) break clean_list = [str(x) for x in item_ids] request = { 'type': "GET", 'handler': "Users/{UserId}/Items", 'params': { 'Ids': ','.join(clean_list), 'Fields': api.info() } } try: result = self.server['http/request'](request, s) self.removed.extend( list( set(clean_list) - set([str(x['Id']) for x in result['Items']]))) for item in result['Items']: if item['Type'] in self.output: self.output[item['Type']].put(item) except HTTPException as error: LOG.error("--[ http status: %s ]", error.status) if error.status in ('ServerUnreachable', 'ReadTimeout', 503): self.queue.put(item_ids) break except Exception as error: LOG.exception(error) count += len(clean_list) self.queue.task_done() if window('emby_should_stop.bool'): break self.is_done = True
def get_episode_by_show(show_id): query = { 'url': "Shows/%s/Episodes" % show_id, 'params': { 'EnableUserData': True, 'EnableImages': True, 'UserId': "{UserId}", 'Fields': api.info() } } for items in _get_items(query): yield items
def run(self): with requests.Session() as s: while True: try: item_ids = self.queue.get(timeout=1) except Queue.Empty: self.is_done = True LOG.info("--<[ q:download/%s ]", id(self)) return request = { 'type': "GET", 'handler': "Users/{UserId}/Items", 'params': { 'Ids': ','.join(str(x) for x in item_ids), 'Fields': api.info() } } try: result = self.server['http/request'](request, s) for item in result['Items']: if item['Type'] in self.output: self.output[item['Type']].put(item) except HTTPException as error: LOG.error("--[ http status: %s ]", error.status) if error.status == 'ServerUnreachable': self.is_done = True break except Exception as error: LOG.exception(error) self.queue.task_done() if window('emby_should_stop.bool'): break
def get_items(parent_id, item_type=None, basic=False, params=None): query = { 'url': "Users/{UserId}/Items", 'params': { 'ParentId': parent_id, 'IncludeItemTypes': item_type, 'SortBy': "SortName", 'SortOrder': "Ascending", 'Fields': api.basic_info() if basic else api.info(), 'CollapseBoxSetItems': False, 'IsVirtualUnaired': False, 'EnableTotalRecordCount': False, 'LocationTypes': "FileSystem,Remote,Offline", 'IsMissing': False, 'Recursive': True } } if params: query['params'].update(params) for items in _get_items(query): yield items