search_screen.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. from .list_view import ListView
  2. import logging
  3. logger = logging.getLogger(__name__)
  4. mode_track_name = 0
  5. mode_album_name = 1
  6. mode_artist_name = 2
  7. class SearchScreen():
  8. def __init__(self, size, base_size, manager):
  9. self.size = size
  10. self.base_size = base_size
  11. self.manager = manager
  12. self.list_view = ListView((0, self.base_size), (
  13. self.size[0], self.size[1] - 2*self.base_size),
  14. self.base_size,
  15. manager.fonts['base'])
  16. self.results_strings = []
  17. self.results = []
  18. def update(self, screen, update_all):
  19. self.list_view.render(screen)
  20. def search(self, query, mode):
  21. if mode == mode_track_name:
  22. search_query = {'any': [query]}
  23. elif mode == mode_album_name:
  24. search_query = {'album': [query]}
  25. else:
  26. search_query = {'artist': [query]}
  27. current_results = self.manager.core.library.search(search_query).get()
  28. self.results = []
  29. self.results_strings = []
  30. for backend in current_results:
  31. if mode == mode_track_name:
  32. iterable = backend.tracks
  33. elif mode == mode_album_name:
  34. iterable = backend.albums
  35. else:
  36. iterable = backend.artists
  37. for result in iterable:
  38. self.results.append(result)
  39. self.results_strings.append(result.name)
  40. self.list_view.set_list(self.results_strings)
  41. def touch_event(self, touch_event):
  42. clicked = self.list_view.touch_event(touch_event)
  43. if clicked is not None:
  44. self.manager.core.tracklist.clear()
  45. self.manager.core.tracklist.add(
  46. uri=self.results[clicked].uri)
  47. self.manager.core.playback.play()