def _get_object_search(id, type): obj = None search = None if type == 'media': obj = Media.get(id) if obj: search = Media.get_search(obj) elif type == 'release': obj = Release.get(id) if obj: search = Release.get_search(obj) elif type == 'search': obj = Search.get(id) if obj: search = { 'name': obj['name'], 'category': obj['category'], 'search_id': id, } if obj.get('album'): search['album'] = obj['album'] if obj and search: search['extra'] = obj.get('extra', {}) return search
def share_media(): data = request.json if not data.get('id'): return jsonify(error='missing id') id = ObjectId(data['id']) media = Media.get(id) if not media: return jsonify(error='media %s not found' % id) user = data.get('user') if not user: return jsonify(error='user %s not found' % user) parameters = { 'id': id, 'path': data.get('path'), } if not Sync.add(user=ObjectId(user), category=media['info']['subtype'], parameters=parameters): return jsonify(error='failed to create sync') return jsonify(result=True)
def list_syncs(): now = datetime.utcnow() sync_recurrence = timedelta(minutes=Settings.get_settings('sync')['recurrence']) items = [] for res in Sync.find(): date_ = res.get('processed') if date_ and date_ + sync_recurrence > now: res['status'] = 'ok' else: res['status'] = 'pending' media_id = res['parameters'].get('id') if not media_id: src = res['category'] else: media = Media.get(media_id) src = media['name'] if media else media_id user = get_user(res['user']) dst = user['name'] if user else res['user'] res['name'] = '%s to %s' % (src, dst) items.append(res) return serialize({'result': items})
def search_subtitles(media_id): media = Media.get(media_id) if not media: return search_langs = Settings.get_settings('subtitles_langs') temp_dir = Settings.get_settings('paths')['tmp'] if not search_langs: logger.error('missing subtitles search langs') return root_path = Settings.get_settings('paths')['media']['video'].rstrip('/') + '/' info = media['info'] if info['subtype'] == 'tv': name = clean(info.get('name'), 6) season = info.get('season') episode = info.get('episode') date = None else: name = info.get('full_name') season = None episode = None date = media.get('extra', {}).get('imdb', {}).get('date') subtitles_langs = [] plugins = { 'subscene': Subscene(), 'opensubtitles': Opensubtitles(**Settings.get_settings('opensubtitles')), } stat = [] for file in media['files']: if not validate_file(file, root_path): continue file_ = get_file(file) dst = file_.get_subtitles_path() processed = False for lang in search_langs: logger.debug('searching %s subtitles for "%s" (%s)', lang, media['name'], file) for obj_name, obj in plugins.items(): if not obj.accessible: continue processed = True lang_ = LANGS_DEF[obj_name].get(lang) if not lang_: continue for url in obj.results(name, season, episode, date, lang_): doc = {'url': url, 'file': file_.file} if Subtitles.find_one(doc): continue try: files_dst = obj.download(url, dst, temp_dir) except RateLimitReached: break if not files_dst: continue for file_dst in files_dst: logger.info('downloaded %s on %s', file_dst, obj_name) doc['created'] = datetime.utcnow() Subtitles.insert(doc, safe=True) for lang in search_langs: if file_.set_subtitles(lang): subtitles_langs.append(lang) stat.append(processed) if False not in stat: media['updated_subs'] = datetime.utcnow() media['subtitles'] = sorted(list(set(subtitles_langs))) Media.save(media, safe=True)