def resolve_magnet(self, magnet_url, info_hash, season, episode, ep_title):
		from resources.lib.modules.source_utils import seas_ep_filter, episode_extras_filter
		try:
			file_url = None
			correct_files = []
			extensions = supported_video_extensions()
			extras_filtering_list = episode_extras_filter()
			data = {'src': magnet_url}
			response = self._post(transfer_directdl_url, data)
			if not 'status' in response or response['status'] != 'success':
				return None
			valid_results = [i for i in response.get('content') if any(i.get('path').lower().endswith(x) for x in extensions) and not i.get('link', '') == '']
			if len(valid_results) == 0:
				return
			if season:
				episode_title = re.sub('[^A-Za-z0-9-]+', '.', ep_title.replace('\'', '')).lower()
				for item in valid_results:
					if seas_ep_filter(season, episode, item['path'].split('/')[-1]):
						correct_files.append(item)
					if len(correct_files) == 0:
						continue
					for i in correct_files:
						compare_link = seas_ep_filter(season, episode, i['path'], split=True)
						compare_link = re.sub(episode_title, '', compare_link)
						if not any(x in compare_link for x in extras_filtering_list):
							file_url = i['link']
							break
			else:
				file_url = max(valid_results, key=lambda x: x.get('size')).get('link', None)
			if file_url:
				if store_to_cloud: self.create_transfer(magnet_url)
				return self.add_headers_to_url(file_url)
		except Exception as e:
			log_utils.log('Error resolve_magnet_pack: %s' % str(e), __name__, log_utils.LOGDEBUG)
			return None
	def resolve_magnet(self, magnet_url, info_hash, season, episode, ep_title):
		from resources.lib.modules.source_utils import seas_ep_filter, episode_extras_filter
		try:
			file_url = None
			correct_files = []
			extensions = supported_video_extensions()
			extras_filtering_list = episode_extras_filter()
			transfer_id = self.create_transfer(magnet_url)
			transfer_info = self.list_transfer(transfer_id)
			valid_results = [i for i in transfer_info.get('links') if any(i.get('filename').lower().endswith(x) for x in extensions) and not i.get('link', '') == '']
			if len(valid_results) == 0: return
			if season:
				for item in valid_results:
					if seas_ep_filter(season, episode, item['filename']):
						correct_files.append(item)
					if len(correct_files) == 0: continue
					episode_title = re.sub(r'[^A-Za-z0-9-]+', '.', ep_title.replace('\'', '')).lower()
					for i in correct_files:
						compare_link = seas_ep_filter(season, episode, i['filename'], split=True)
						compare_link = re.sub(episode_title, '', compare_link)
						if not any(x in compare_link for x in extras_filtering_list):
							media_id = i['link']
							break
			else:
				media_id = max(valid_results, key=lambda x: x.get('size')).get('link', None)
			if not store_to_cloud: self.delete_transfer(transfer_id)
			file_url = self.unrestrict_link(media_id)
			return file_url
		except:
			log_utils.error()
			if transfer_id: self.delete_transfer(transfer_id)
			return None
Example #3
0
    def resolve_magnet_pack(self, media_id, info_hash, season, episode,
                            ep_title):
        from resources.lib.modules.source_utils import seas_ep_filter, episode_extras_filter
        try:
            info_hash = info_hash.lower()
            torrent_id = None
            rd_url = None
            match = False
            extensions = supported_video_extensions()
            extras_filtering_list = episode_extras_filter()
            info_hash = info_hash.lower()
            torrent_files = self._get(check_cache_url + '/' + info_hash)
            if not info_hash in torrent_files:
                return None
            torrent_id = self.create_transfer(media_id)
            torrent_files = torrent_files[info_hash]['rd']
            for item in torrent_files:
                video_only = self.video_only(item, extensions)
                if not video_only:
                    continue
                correct_file_check = False
                item_values = [i['filename'] for i in item.values()]
                for value in item_values:
                    correct_file_check = seas_ep_filter(
                        season, episode,
                        re.sub('[^A-Za-z0-9]+', '.', unquote(value)).lower())
                    if correct_file_check:
                        break
                if not correct_file_check:
                    continue
                torrent_keys = item.keys()
                if len(torrent_keys) == 0:
                    continue
                torrent_keys = ','.join(torrent_keys)
                self.select_file(torrent_id, torrent_keys)
                torrent_info = self.torrent_info(torrent_id)
                selected_files = [(idx, i) for idx, i in enumerate(
                    [i for i in torrent_info['files'] if i['selected'] == 1])]
                correct_files = []
                correct_file_check = False
                for value in selected_files:
                    checker = re.sub('[^A-Za-z0-9]+', '.',
                                     unquote(value[1]['path'])).lower()
                    correct_file_check = seas_ep_filter(
                        season, episode, checker)
                    if correct_file_check:
                        correct_files.append(value[1])
                        break

                if len(correct_files) == 0:
                    continue

                episode_title = re.sub('[^A-Za-z0-9-]+', '.',
                                       ep_title.replace("\'", '')).lower()

                for i in correct_files:
                    compare_link = re.sub('[^A-Za-z0-9-]+', '.',
                                          unquote(i['path'].replace(
                                              "\'", ''))).lower()
                    compare_link = seas_ep_filter(season,
                                                  episode,
                                                  compare_link,
                                                  split=True)
                    compare_link = re.sub(episode_title, '', compare_link)

                    if any(x in compare_link for x in extras_filtering_list):
                        continue
                    else:
                        match = True
                        break

                if match:
                    index = [
                        i[0] for i in selected_files
                        if i[1]['path'] == correct_files[0]['path']
                    ][0]

                rd_link = torrent_info['links'][index]
                rd_url = self.unrestrict_link(rd_link)

                # should we be deleting torrents?  isn't this our cloud account?
                self.delete_torrent(torrent_id)

                return rd_url

            self.delete_torrent(torrent_id)
        except Exception as e:
            if torrent_id: self.delete_torrent(torrent_id)
            log_utils.log('Real-Debrid Error: RESOLVE MAGNET PACK | %s' % e,
                          __name__, log_utils.LOGDEBUG)
            raise
 def resolve_magnet(self, magnet_url, info_hash, season, episode, ep_title):
     from resources.lib.modules.source_utils import seas_ep_filter, episode_extras_filter
     try:
         torrent_id = None
         rd_url = None
         match = False
         extensions = supported_video_extensions()
         extras_filtering_list = episode_extras_filter()
         info_hash = info_hash.lower()
         torrent_files = self._get(check_cache_url + '/' + info_hash)
         if not info_hash in torrent_files: return None
         torrent_id = self.add_magnet(magnet_url)
         torrent_info = self.torrent_info(torrent_id)
         torrent_files = torrent_files[info_hash]['rd']
         for item in torrent_files:
             try:
                 video_only = self.video_only(item, extensions)
                 if not video_only: continue
                 if season:
                     correct_file_check = False
                     item_values = [i['filename'] for i in item.values()]
                     for value in item_values:
                         correct_file_check = seas_ep_filter(
                             season, episode, value)
                         if correct_file_check: break
                     if not correct_file_check: continue
                 torrent_keys = item.keys()
                 if len(torrent_keys) == 0: continue
                 torrent_keys = ','.join(torrent_keys)
                 self.add_torrent_select(torrent_id, torrent_keys)
                 torrent_info = self.torrent_info(torrent_id)
                 status = torrent_info.get('status')
                 if 'error' in torrent_info: continue
                 selected_files = [(idx, i) for idx, i in enumerate([
                     i for i in torrent_info['files'] if i['selected'] == 1
                 ])]
                 if season:
                     correct_files = []
                     correct_file_check = False
                     for value in selected_files:
                         correct_file_check = seas_ep_filter(
                             season, episode, value[1]['path'])
                         if correct_file_check:
                             correct_files.append(value[1])
                             break
                     if len(correct_files) == 0: continue
                     episode_title = re.sub(r'[^A-Za-z0-9-]+', '.',
                                            ep_title.replace("\'",
                                                             '')).lower()
                     for i in correct_files:
                         compare_link = seas_ep_filter(season,
                                                       episode,
                                                       i['path'],
                                                       split=True)
                         compare_link = re.sub(episode_title, '',
                                               compare_link)
                         if any(x in compare_link
                                for x in extras_filtering_list):
                             continue
                         else:
                             match = True
                             break
                     if match:
                         index = [
                             i[0] for i in selected_files
                             if i[1]['path'] == correct_files[0]['path']
                         ][0]
                         break
                 else:
                     match, index = True, 0
             except:
                 log_utils.error()
         if match:
             rd_link = torrent_info['links'][index]
             rd_url = self.unrestrict_link(rd_link)
             if rd_url.endswith('rar'): rd_url = None
             if not store_to_cloud: self.delete_torrent(torrent_id)
             return rd_url
         self.delete_torrent(torrent_id)
     except Exception as e:
         if torrent_id: self.delete_torrent(torrent_id)
         log_utils.log(
             'Real-Debrid Error: RESOLVE MAGNET %s | %s' % (magnet_url, e),
             __name__, log_utils.LOGDEBUG)
         return None