library_screen.py 2.7 KB

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