library_screen.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import logging
  2. import mopidy.models
  3. from .list_view import ListView
  4. from .input_manager import InputManager
  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, 0), (
  12. self.size[0], self.size[1] - self.base_size),
  13. self.base_size,
  14. manager.fonts['base'])
  15. self.directory_list = []
  16. self.current_directory = None
  17. self.library = None
  18. self.library_strings = None
  19. self.lookup_uri(None)
  20. def get_dirty_area(self):
  21. return self.list_view.get_dirty_area()
  22. def go_inside_directory(self, uri):
  23. self.directory_list.append(self.current_directory)
  24. self.current_directory = uri
  25. self.lookup_uri(uri)
  26. def lookup_uri(self, uri):
  27. self.library_strings = []
  28. if uri is not None:
  29. self.library_strings.append("..")
  30. self.library = self.manager.core.library.browse(uri).get()
  31. for lib in self.library:
  32. self.library_strings.append(lib.name)
  33. self.list_view.set_list(self.library_strings)
  34. def go_up_directory(self):
  35. if len(self.directory_list):
  36. directory = self.directory_list.pop()
  37. self.current_directory = directory
  38. self.lookup_uri(directory)
  39. def update(self, screen, update_all):
  40. self.list_view.render(screen)
  41. def touch_event(self, touch_event):
  42. clicked = self.list_view.touch_event(touch_event)
  43. if clicked is not None:
  44. if touch_event.type == InputManager.long_click:
  45. if self.current_directory is not None:
  46. if clicked == 0:
  47. self.go_up_directory()
  48. else:
  49. self.play_uri(self.library[clicked - 1].uri,
  50. False)
  51. else:
  52. self.play_uri(self.library[clicked].uri, False)
  53. else:
  54. if self.current_directory is not None:
  55. if clicked == 0:
  56. self.go_up_directory()
  57. else:
  58. if self.library[
  59. clicked - 1].type == mopidy.models.Ref.TRACK:
  60. self.play_uri(
  61. self.library[clicked - 1].uri, True)
  62. else:
  63. self.go_inside_directory(
  64. self.library[clicked - 1].uri)
  65. else:
  66. if self.library[
  67. clicked].type == mopidy.models.Track:
  68. self.play_uri(self.library[clicked].uri, True)
  69. else:
  70. self.go_inside_directory(
  71. self.library[clicked].uri)
  72. def play_uri(self, uri, track):
  73. self.manager.core.tracklist.clear()
  74. if track:
  75. self.manager.core.tracklist.add(uri=uri)
  76. self.manager.core.playback.play()
  77. else:
  78. # TODO: add folder to tracks to play
  79. pass