- Make sure server has the same DB migration version as client via the ping and/or auth endpoints.
- Report assets played to server, probably using UIDs to allow accidental dupes
- Logging and reporting on client actions.
- If an empty project is detected, create an install button on admin login/landing, providing option to create initial data. Bonus: Station ID says 55.5 FM, KMUR Made Up Radio or something silly.
- Sample generation stop set block server side testing, with optional date override.
- Use expose nginx + gunicorn container, rather than Django so uploads are performant and one can deploy to prod using Docker.
- Implement
STRIP_UPLOADED_AUDIO
.
- Minimum window dimensions and full screen on all three platforms.
- Save window position on all three platforms and whether maximized / fullscreen
- Prevent hibernation, ie using
caffeinate
cmd on macOS and on Windows,SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED)
- Write unit tests.
- Client standalone mode, ie run Django in a separate process. (Will need to
include compiled sox with mp3 libs on macOS/Window and build an additional Django
executable with PyInstaller, however will need to work around
PyInstaller:MERGE(...)
being broken.) - Build Windows with high res manifest file: link
- Build macOS with a high DPI plist file
NSPrincipalClass = NSApplication
, example here. - For linux PyInstaller example, need to move files to
dist/cefpython3
folder or configure cefpython.Initialize(...) to use appropriate path settings. Can comment on bug here. - Create Linux
.deb
that depends on packagelibgtk2.0
. - Allow output device selection, ie via
navigator.mediaDevices.enumerateDevices()
, andwavesurfer.setSinkId()
. Note: there's a bug in cef where thedeviceId
(akasinkId
) of a device changes every start, so I'll have to persist the output device via label matching. - Long tracks render using NES.css's progress bar, rather than Wavesurfer.
- Error checking, see Wavesurfer's error event
- Refactor / clean up JS. Currently it's pretty prototype-y.
- Animation when wait time is up
- Clean cache button (cache size estimate based on files not backed by Asset rows)
- Left/right keyboard controls iff
CLICKABLE_WAVEFORM = True
- Total stopset time, as well as MM:SS / MM:SS total left in current Stop Set.