search.py 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  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):
  7. if cache is None:
  8. keywords = console.ask_input('Search for')
  9. _sites = []
  10. if isinstance(sites.available[selected_site], sites.DefaultSite):
  11. _sites = sites.available[1:]
  12. else:
  13. _sites = [sites.available[selected_site]]
  14. items = []
  15. for site in _sites:
  16. console.output('Searching: {0}'.format(site.url))
  17. _items = site.perform_search(keywords)
  18. console.output('\tFound {0} results'.format(len(_items)))
  19. items.extend(_items)
  20. if len(items) == 0:
  21. console.output('No results found')
  22. return True
  23. items = itemsort.smart(items, keywords)
  24. last(items)
  25. else:
  26. items = cache
  27. while True:
  28. picked_item = console.option_picker('Pick a song to download',
  29. items,
  30. quit=True,
  31. objects=[
  32. '__id__',
  33. 'x.score',
  34. 'x.duration',
  35. 'x.size',
  36. 'x.artist',
  37. 'x.title'
  38. ],
  39. table=[
  40. ('ID', 2),
  41. ('Score', 5),
  42. ('Time', 5),
  43. ('Size', 4),
  44. ('Artist', 50),
  45. ('Title', 100)
  46. ])
  47. if picked_item is None:
  48. break
  49. else:
  50. item = items[picked_item]
  51. console.output('Downloading {0}'.format(item.title))
  52. item.site.download(item)
  53. break
  54. return True