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.
* Song database and entity overhaul, part 1.
* Remove Songs table from a number of qeries and reports.
* Fix references to Songs table; rewrite StationMedia processing.
* Remove song reference in queue page.
* Allow custom log level via environment variable.
- 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
- All media rows will have an "art_updated_at" field that tracks the latest time the art was changed for the file.
- If this field is set to zero (0), the system will return the default album art instead of attempting to resolve an album art URL that we know won't go anywhere.
- The timestamp of the latest update is now included in the album art image SRC, so we can maintain our very long caches without interfering with album art updates.
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.