library_screen.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  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), (
  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 should_update(self):
  33. if self.list_view.should_update():
  34. return BaseScreen.update_partial
  35. else:
  36. return BaseScreen.no_update
  37. def set_update_rects(self, rects):
  38. self.list_view.set_update_rects(rects)
  39. def update(self, screen, update_type):
  40. update_all = (update_type == BaseScreen.update_all)
  41. self.list_view.render(screen, update_all)
  42. def touch_event(self, touch_event):
  43. clicked = self.list_view.touch_event(touch_event)
  44. if clicked is not None:
  45. if self.current_directory is not None:
  46. if clicked == 0:
  47. self.go_up_directory()
  48. else:
  49. if self.library[clicked - 1].type\
  50. == mopidy.models.Ref.TRACK:
  51. self.play_uri(clicked-1)
  52. else:
  53. self.go_inside_directory(
  54. self.library[clicked - 1].uri)
  55. else:
  56. self.go_inside_directory(self.library[clicked].uri)
  57. def play_uri(self, track_pos):
  58. self.manager.core.tracklist.clear()
  59. tracks = []
  60. for item in self.library:
  61. if item.type == mopidy.models.Ref.TRACK:
  62. tracks.append(self.manager.core.library.lookup(
  63. item.uri).get()[0])
  64. else:
  65. track_pos -= 1
  66. self.manager.core.tracklist.add(tracks)
  67. self.manager.core.playback.play(
  68. tl_track=self.manager.core.tracklist.tl_tracks.get()
  69. [track_pos])