import sites from helper import console from main import selected_site from helper.sites import itemsort from .last import last def search(cache=None, keywords=None, automode=False, tags=None): if cache is None: if keywords is None: keywords = console.ask_input('Search for') keywords = keywords.lower() _sites = [] if isinstance(sites.available[selected_site], sites.DefaultSite): _sites = sites.available[1:] else: _sites = [sites.available[selected_site]] items = [] for site in _sites: console.output('Searching: {0}'.format(site.url)) _items = site.perform_search(keywords) console.output('\tFound {0} results'.format(len(_items))) items.extend(_items) if len(items) == 0: console.output('No results found') if automode: return False return True items = itemsort.smart(items, keywords) if len(items) == 0: console.output('No correct results found - consider searching this song manually') if automode: return False return True last(items) else: items = cache while True: if not automode: picked_item = console.option_picker('Pick a song to download', items, quit=True, objects=[ '__id__', 'x.score', 'x.duration', 'x.size', 'x.artist', 'x.title' ], table=[ ('ID', 2), ('Score', 5), ('Time', 5), ('Size', 4), ('Artist', 50), ('Title', 100) ]) else: # Automode assume that the true track is on top position (index=0) picked_item = 0 if picked_item is None: break else: item = items[picked_item] console.output('Downloading {0}'.format(item.title)) result = item.site.download(item, automode=automode, tags=tags) if automode: return result break return True