library_screen.py 2.7 KB

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