search.py 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import sites
  2. from helper import console
  3. from main import selected_site
  4. from helper.sites import itemsort
  5. from .last import last
  6. def search(cache=None, keywords=None, automode=False, tags=None):
  7. if cache is None:
  8. if keywords is None:
  9. keywords = console.ask_input('Search for')
  10. keywords = keywords.lower()
  11. _sites = []
  12. if isinstance(sites.available[selected_site], sites.DefaultSite):
  13. _sites = sites.available[1:]
  14. else:
  15. _sites = [sites.available[selected_site]]
  16. items = []
  17. for site in _sites:
  18. console.output('Searching: {0}'.format(site.url))
  19. _items = site.perform_search(keywords)
  20. console.output('\tFound {0} results'.format(len(_items)))
  21. items.extend(_items)
  22. if len(items) == 0:
  23. console.output('No results found')
  24. if automode:
  25. return False
  26. return True
  27. items = itemsort.smart(items, keywords)
  28. if len(items) == 0:
  29. console.output('No correct results found - consider searching this song manually')
  30. if automode:
  31. return False
  32. return True
  33. last(items)
  34. else:
  35. items = cache
  36. while True:
  37. if not automode:
  38. picked_item = console.option_picker('Pick a song to download',
  39. items,
  40. quit=True,
  41. objects=[
  42. '__id__',
  43. 'x.score',
  44. 'x.duration',
  45. 'x.size',
  46. 'x.artist',
  47. 'x.title'
  48. ],
  49. table=[
  50. ('ID', 2),
  51. ('Score', 5),
  52. ('Time', 5),
  53. ('Size', 4),
  54. ('Artist', 50),
  55. ('Title', 100)
  56. ])
  57. else:
  58. # Automode assume that the true track is on top position (index=0)
  59. picked_item = 0
  60. if picked_item is None:
  61. break
  62. else:
  63. item = items[picked_item]
  64. console.output('Downloading {0}'.format(item.title))
  65. result = item.site.download(item, automode=automode, tags=tags)
  66. if automode:
  67. return result
  68. break
  69. return True