search.py 2.2 KB

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