def __init__(self): # Initialize application state. self._model = Model() self._player = Player(model=self._model)
class MainController(object): windows = set() def __init__(self): # Initialize application state. self._model = Model() self._player = Player(model=self._model) def start(self): log.debug("Starting MainController") # Show app splash screen. self.init_window = self.display_window(InitWindow) # Don't block GUI, start after loop runs. QTimer.singleShot(100, self.init_session) def init_session(self): if self._model.logged_in: return # Try restoring previous session first. if self._model.restore_session(): return self.show_main_menu() # Enforce email/password login. self.display_window(LoginWindow, callback=(lambda: self._model.logged_in and self.show_main_menu())) def _show(self, window): u"Store reference to window object and make window visible." self.windows.add(window) window.show() def display_window(self, cls, *args, **kwargs): u"""Instantiates given window class with parameters, uses ``_show`` to display the window and prevent it from closing due to GC. """ if "controller" not in kwargs: kwargs["controller"] = self window = cls(*args, **kwargs) self._show(window) return window def clean_window(self, window): u"Remove reference to a window so it can be GC'ed" if window in self.windows: self.windows.remove(window) def model(self): # XXX: This could return some read-only proxy as well. return self._model def show_main_menu(self): self.display_window(MenuWindow) # Scrape splash screen. try: self.init_window.close() except AttributeError: pass # Pass-through methods # def login(self, email, password): return self._model.login(email, password) def quit(self): # Just quit the application the Qt's way. QCoreApplication.instance().quit() ## Playlists ## TODO: move to other controller? def show_auto_playlists(self, parent=None): self.display_window(ListingWindow, kind="auto", parent=parent) def show_user_playlists(self, parent=None): self.display_window(ListingWindow, kind="user", parent=parent) def show_playlist(self, playlist_id, parent=None): self.display_window(PlaylistWindow, playlist_id=playlist_id, parent=parent, controller=self._player) def show_queue(self, parent=None): self.display_window(QueueWindow, parent=parent, controller=self._player)
class MainController(object): windows = set() def __init__(self): # Initialize application state. self._model = Model() self._player = Player(model=self._model) def start(self): log.debug("Starting MainController") # Show app splash screen. self.init_window = self.display_window(InitWindow) # Don't block GUI, start after loop runs. QTimer.singleShot(100, self.init_session) def init_session(self): if self._model.logged_in: return # Try restoring previous session first. if self._model.restore_session(): return self.show_main_menu() # Enforce email/password login. self.display_window( LoginWindow, callback=(lambda: self._model.logged_in and self.show_main_menu())) def _show(self, window): u"Store reference to window object and make window visible." self.windows.add(window) window.show() def display_window(self, cls, *args, **kwargs): u"""Instantiates given window class with parameters, uses ``_show`` to display the window and prevent it from closing due to GC. """ if "controller" not in kwargs: kwargs["controller"] = self window = cls(*args, **kwargs) self._show(window) return window def clean_window(self, window): u"Remove reference to a window so it can be GC'ed" if window in self.windows: self.windows.remove(window) def model(self): # XXX: This could return some read-only proxy as well. return self._model def show_main_menu(self): self.display_window(MenuWindow) # Scrape splash screen. try: self.init_window.close() except AttributeError: pass # Pass-through methods # def login(self, email, password): return self._model.login(email, password) def quit(self): # Just quit the application the Qt's way. QCoreApplication.instance().quit() ## Playlists ## TODO: move to other controller? def show_auto_playlists(self, parent=None): self.display_window(ListingWindow, kind="auto", parent=parent) def show_user_playlists(self, parent=None): self.display_window(ListingWindow, kind="user", parent=parent) def show_playlist(self, playlist_id, parent=None): self.display_window(PlaylistWindow, playlist_id=playlist_id, parent=parent, controller=self._player) def show_queue(self, parent=None): self.display_window(QueueWindow, parent=parent, controller=self._player)