def beginSong(self, file): self.selectedSong = None manager.setCpuSpeed('load') manager.display.fill((0, 0, 0)) winWidth, winHeight = manager.displaySize winCenter = winWidth / 2 rowA = winHeight / 3 rowC = winHeight * 5 / 6 self.__writeSongTitle(file, rowA) text = self.subtitleFont.render("Loading", True, (255, 255, 255)) rect = text.get_rect() rect = rect.move(winCenter - rect.centerx, rowC) manager.display.blit(text, rect) pygame.display.flip() # This will call the songFinishedCallback, so call it early. self.shutdown() self.writeMarkedSongs() player = file.MakePlayer(self.songDb, self.errorPopupCallback, self.songFinishedCallback) if player == None: return # Start playing. try: player.Play() except: self.errorPopupCallback("Error starting player.\n%s\n%s" % (sys.exc_info()[0], sys.exc_info()[1])) return # Go to sleep until the song is over. try: manager.WaitForPlayer() except: self.errorPopupCallback("Error while playing song.\n%s\n%s" % (sys.exc_info()[0], sys.exc_info()[1])) return # The song is over. Now recover control and redisplay the # song list. manager.OpenCPUControl() manager.setCpuSpeed('menu_fast') self.heldStartTicks = pygame.time.get_ticks() manager.InitPlayer(self) manager.OpenDisplay() # In case the screen has been resized during the song. self.setupScrollWindow() self.screenDirty = True # Discard any events that occurred while we were resetting the # display. for event in pygame.event.get(): pass
def start(self): self.appStart = pygame.time.get_ticks() self.heldStartTicks = self.appStart manager.OpenCPUControl() manager.setCpuSpeed('startup') self.numSongInfoLines = 1 self.setupSplashScreen() manager.InitPlayer(self) self.setupScrollWindow() self.screenDirty = True needsSave = False if manager.options.scan_dir: # Replace the old scan list. self.songDb.Settings.FolderList = [manager.options.scan_dir] needsSave = True if manager.options.scan_dirs: # Add one or more new directories to the list. self.songDb.Settings.FolderList += manager.options.scan_dirs needsSave = True if manager.options.scan: # Re-scan the files. self.songDb.BuildSearchDatabase(pykdb.AppYielder(), MiniBusyCancelDialog(self)) needsSave = True else: # Read the existing database. self.songDb.LoadDatabase(self.errorPopupCallback) if needsSave: self.songDb.SaveSettings() self.songDb.SaveDatabase() if not self.songDb.FullSongList: # No files. self.errorPopupCallback("No songs in catalog.") return if manager.options.validate: manager.ValidateDatabase(self.songDb) return if self.songDb.GotTitles: self.numSongInfoLines += 1 if self.songDb.GotArtists: self.numSongInfoLines += 1 self.setupScrollWindow() self.readMarkedSongs() if self.songDb.GotTitles: self.songDb.SelectSort('title') elif self.songDb.GotArtists: self.songDb.SelectSort('artist') else: self.songDb.SelectSort('filename') self.currentRow = 0 self.searchString = '' self.heldKey = None self.heldStartTicks = 0 self.heldRepeat = 0 manager.setCpuSpeed('wait') # Now that we've finished loading, wait up a second and give # the user a chance to view the splash screen, in case we # loaded too fast. if self.splashStart != None: splashTime = pygame.time.get_ticks() - self.splashStart remainingTime = 2500 - splashTime if remainingTime > 0: pygame.time.wait(remainingTime) self.running = True manager.setCpuSpeed('menu_fast') self.heldStartTicks = pygame.time.get_ticks() while self.running: manager.Poll() self.writeMarkedSongs() manager.CloseDisplay()