Previously AzuraCast had two very similar `$settings` variables, one that was from environment and the other from the database. This refactor distinguishes the two much more clearly.
This migration adds "Storage Locations", managed via a new System Administration panel, that can hold Station Media data, live broadcast recordings, and backups. These storage locations can be local (as they are by default) or remote via any S3-compatible service.
Create a new "StationQueue" entity that contains the upcoming song queue, and split the important AutoDJ functionality across multiple classes (Annotations, Queue and Scheduler).
- Switch to EntityManagerInterface for EM uses
- Wrap EntityManager in close-resilient wrapper
- Close/clear/reopen EM with every request
- Rework tests to be em->clear() resilient.
- Refactor Flysystem to use constants instead of magic strings for URL prefixes
- Add audiowaveform installation to both Docker and Ansible installations
- Use audiowaveform to generate waveforms saved to disk for every track
- Load these waveforms when visiting the visual waveform editor page instead of using the browser to calculate them
- Add volume control and use app-wide storage of default volume
- Remove "beta" tag from waveform editor header
* Add form entries and LS config writing for live stream recording.
* Create new Broadcast entity; implement new djon/djoff handling.
* Rework record command procedure and add Station relation to Broadcast.
* Run code reformat on JS to add semicolons back.
* Properly save recording path on entity.
* Initial commit of new streamers Vue component.
* Finish frontend Vue dev and add necessary API endpoints.
* Add loader to Datatable; update npm deps; polish on components.
Implement an upgrade of the codebase to use Slim Framework version 4, which includes the following changes:
- Updating to Slim version 4 and the corresponding AzuraCore updates.
- Making all objects PSR-7 Request/Response agnostic (and creating RequestHelper and ResponseHelper objects to interact with the PSR-7 Req/Resp objects).
- Moving to PHP-DI as a DI container and implementing its autowiring support.