library_screen.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. from .list_view import ListView
  2. import logging
  3. import mopidy.models
  4. logger = logging.getLogger(__name__)
  5. class LibraryScreen():
  6. def __init__(self, size, base_size, manager):
  7. self.size = size
  8. self.base_size = base_size
  9. self.manager = manager
  10. self.list_view = ListView((0,self.base_size),(self.size[0],self.size[1]-2*self.base_size), self.base_size, manager.fonts)
  11. self.directory_list = []
  12. self.current_directory = None
  13. self.library = None
  14. self.library_strings = None
  15. self.lookup_uri(None)
  16. def go_inside_directory(self, uri):
  17. self.directory_list.append(self.current_directory)
  18. self.current_directory = uri
  19. self.lookup_uri(uri)
  20. def lookup_uri(self, uri):
  21. self.library_strings = []
  22. if uri is not None:
  23. self.library_strings.append("..")
  24. self.library = self.manager.core.library.browse(uri).get()
  25. for lib in self.library:
  26. self.library_strings.append(lib.name)
  27. self.list_view.set_list(self.library_strings)
  28. def go_up_directory(self):
  29. if len(self.directory_list):
  30. directory = self.directory_list.pop()
  31. self.current_directory = directory
  32. self.lookup_uri(directory)
  33. def update(self, screen):
  34. self.list_view.render(screen)
  35. def touch_event(self, touch_event):
  36. clicked = self.list_view.touch_event(touch_event)
  37. if clicked is not None:
  38. if self.current_directory is not None:
  39. if clicked == 0:
  40. self.go_up_directory()
  41. else:
  42. if self.library[clicked-1].type == mopidy.models.Ref.TRACK:
  43. self.play_uri(self.library[clicked-1].uri)
  44. else:
  45. self.go_inside_directory(self.library[clicked-1].uri)
  46. else:
  47. if self.library[clicked].type == mopidy.models.Track:
  48. self.play_uri(self.library[clicked].uri)
  49. else:
  50. self.go_inside_directory(self.library[clicked].uri)
  51. def play_uri(self, uri):
  52. self.manager.core.tracklist.clear()
  53. self.manager.core.tracklist.add(uri=uri)
  54. self.manager.core.playback.play()