123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- #!./bin/python3
- import sys, os, time
- import traceback
- import yaml
- # Include pygame without support prompt
- # Typing only available from version >= 2.0
- os.environ['PYGAME_HIDE_SUPPORT_PROMPT'] = "hide"
- import pygame # type: ignore
- from display import Display
- from player import Player
- # Configuration
- config = yaml.safe_load(open("config.yml"))
- fbdev = config.get("fbdev", "/dev/fb1")
- dx = config.get("dimx", 128)
- dy = config.get("dimy", 160)
- # Initialise pygame
- os.environ["SDL_FBDEV"] = fbdev
- pygame.init()
- # Create the display
- pydsp = pygame.display.set_mode((dx, dy), 0, 32)
- pygame.display.set_caption("Musikautomat")
- pygame.mouse.set_visible(False)
- pygame.key.set_repeat(400, 100)
- # Initialise state objects
- display = Display(config, pydsp)
- display.update()
- eventSink = display
- player = Player(config, pydsp)
- clk = pygame.time.Clock()
- # Run the game loop
- while True:
- clk.tick(10) # We only need 10 FPS
- try:
- for event in pygame.event.get():
-
- # Handle exit event
-
- if event.type == pygame.QUIT:
- pygame.quit()
- sys.exit()
-
- # Handle key events
- if event.type == pygame.KEYDOWN:
- if event.key == pygame.K_DOWN:
- eventSink.action("down")
- elif event.key == pygame.K_UP:
- eventSink.action("up")
- elif event.key == pygame.K_RIGHT:
- # Activate player
- item = display.currentItem()
- eventSink = player
-
- # TODO File selection depending on type
- path = item.get("path")
- files = os.listdir(path)
- player.setData([{
- "name" : f,
- "path" : os.path.join(path, f)
- } for f in files])
- player.update()
- elif event.key == pygame.K_LEFT:
- # Get back to display
- eventSink = display
- display.update()
- elif event.key == pygame.K_RETURN:
- # Play / pause current item
- player.togglePlay()
- except Exception as e:
-
- # Display error
- traceback.print_exc()
- pydsp.fill((0,0,0))
- font = pygame.font.Font('freesansbold.ttf', 12)
-
- s = str(e)
- n = int(dx / 6)
- for i, start in enumerate(range(0, len(s), n)):
- text = font.render(s[start:start+n], True, (255, 0, 0) , (0, 0, 0))
- pydsp.blit(text, (0, i * 12))
-
- eventSink = display
- pygame.display.update()
|