Support for searching all the torrent categories in parallel if no categories is provided

This commit is contained in:
Fabio Manganiello 2019-04-24 23:45:57 +02:00
parent 2bcc22e0fc
commit d2f4ec44c3

View file

@ -1,6 +1,7 @@
import json import json
import os import os
import random import random
import threading
import time import time
import urllib.request import urllib.request
@ -46,8 +47,33 @@ class TorrentPlugin(Plugin):
if download_dir: if download_dir:
self.download_dir = os.path.abspath(os.path.expanduser(download_dir)) self.download_dir = os.path.abspath(os.path.expanduser(download_dir))
def _search_all(self, query, *args, **kwargs):
results = {
category: []
for category in self.supported_categories
}
def worker(category):
results[category] = self.search(query, category=category, *args, **kwargs).output
workers = [
threading.Thread(target=worker, kwargs={'category': category})
for category in self.supported_categories
]
for worker in workers:
worker.start()
for worker in workers:
worker.join()
ret = []
for (category, items) in results.items():
ret += items
return ret
@action @action
def search(self, query, category='movies', language=None): def search(self, query, category=None, language=None):
""" """
Perform a search of video torrents. Perform a search of video torrents.
@ -55,13 +81,16 @@ class TorrentPlugin(Plugin):
:type query: str :type query: str
:param category: Category to search. Supported types: "movies", "tv", "anime". :param category: Category to search. Supported types: "movies", "tv", "anime".
Default: "movies" Default: None (search all categories)
:type category: str :type category: str
:param language: Language code for the results - example: "en" (default: None, no filter) :param language: Language code for the results - example: "en" (default: None, no filter)
:type language: str :type language: str
""" """
if not category:
return self._search_all(query, language=language)
if category not in self.supported_categories: if category not in self.supported_categories:
raise RuntimeError('Unsupported category {}. Supported category: {}'. raise RuntimeError('Unsupported category {}. Supported category: {}'.
format(category, self.supported_categories)) format(category, self.supported_categories))
@ -86,8 +115,9 @@ class TorrentPlugin(Plugin):
return sorted([ return sorted([
{ {
'imdb_id': result.get('imdb_id'), 'imdb_id': result.get('imdb_id'),
'title': '{title} [{language}][{quality}]'.format( 'type': category,
title=result.get('title'), language=lang, quality=quality), 'title': '{title} [{category}][{language}][{quality}]'.format(
title=result.get('title'), language=lang, quality=quality, category=category),
'year': result.get('year'), 'year': result.get('year'),
'synopsis': result.get('synopsis'), 'synopsis': result.get('synopsis'),
'trailer': result.get('trailer'), 'trailer': result.get('trailer'),