library_screen.py 2.5 KB

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