100 lines
2.5 KiB
Python
100 lines
2.5 KiB
Python
import os
|
|
import logging
|
|
from enum import Enum
|
|
from uuid import uuid4
|
|
|
|
from pizzactrl import SOUNDS_PATH
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
"""
|
|
Paths to files
|
|
"""
|
|
# Base paths
|
|
_STORY_SOUNDS = '/home/pi/sounds/'
|
|
_SFX_SOUNDS = 'sounds/'
|
|
_REC_FILES = '/home/pi/pizzafiles/'
|
|
|
|
USB_STICK = _REC_FILES + '.stick'
|
|
|
|
|
|
class FileType(Enum):
|
|
REC = 'r'
|
|
STORY = 's'
|
|
SFX = 'f'
|
|
|
|
|
|
class FileHandle:
|
|
"""
|
|
Base class for handles on context-specific paths
|
|
"""
|
|
uuid = None
|
|
|
|
def __init__(self, name: str, filetype: FileType):
|
|
self.name = name
|
|
self.filetype = filetype
|
|
# Create a uuid and fitting folder if not present
|
|
# All RecFiles for this session will be added to this foldere
|
|
if FileHandle.uuid is None:
|
|
FileHandle.uuid = str(uuid4())
|
|
logger.info(f'generated uuid for session: {FileHandle.uuid}')
|
|
try:
|
|
os.mkdir(_REC_FILES + FileHandle.uuid)
|
|
FileHandle.uuid += '/'
|
|
except OSError:
|
|
FileHandle.uuid = ''
|
|
|
|
def __str__(self):
|
|
"""
|
|
Return the file path as a string
|
|
"""
|
|
return {
|
|
FileType.STORY: lambda: (_STORY_SOUNDS + self.name + '.wav'),
|
|
FileType.SFX: lambda: (SOUNDS_PATH + self.name
|
|
+ '.wav'),
|
|
FileType.REC: lambda: (_REC_FILES + FileHandle.uuid + self.name)
|
|
}[self.filetype]()
|
|
|
|
|
|
class SfxFile(FileHandle):
|
|
"""
|
|
Returns the path to a sound-effect file
|
|
"""
|
|
def __init__(self, name: str):
|
|
FileHandle.__init__(self, name, FileType.SFX)
|
|
|
|
|
|
class RecFile(FileHandle):
|
|
"""
|
|
Returns the path to a recordable file
|
|
"""
|
|
def __init__(self, name: str):
|
|
FileHandle.__init__(self, name, FileType.REC)
|
|
|
|
|
|
class StoryFile(FileHandle):
|
|
"""
|
|
Returns the path to a storyboard file
|
|
"""
|
|
def __init__(self, name: str):
|
|
FileHandle.__init__(self, name, FileType.STORY)
|
|
|
|
|
|
REC_NAME = RecFile('name.wav')
|
|
REC_MY_IBK = RecFile('my_ibk.wav')
|
|
REC_PORTRAIT = RecFile('portrait.jpg')
|
|
REC_CITY_NAME = RecFile('city_name.wav')
|
|
REC_CITY_DESC = RecFile('city_description.wav')
|
|
REC_CITY_SOUND = RecFile('city_sound.wav')
|
|
REC_DRAW_CITY = RecFile('city_video.h264')
|
|
REC_CITY_PHOTO = RecFile('city_drawing.jpg')
|
|
|
|
SFX_ERROR = SfxFile('error')
|
|
SFX_ERROR_DE = SfxFile('error-de')
|
|
SFX_ERROR_EN = SfxFile('error-en')
|
|
SFX_POST_OK = SfxFile('done')
|
|
SFX_SHUTTER = SfxFile('done')
|
|
SFX_REC_AUDIO = SfxFile('countdown')
|
|
SFX_STOP_REC = SfxFile('done')
|
|
|
|
SND_SELECT_LANG = StoryFile(name='01')
|