4
0
mirror of https://github.com/AzuraCast/AzuraCast.git synced 2024-06-14 13:16:37 +00:00
Commit Graph

629 Commits

Author SHA1 Message Date
Buster "Silver Eagle" Neece
9e011647c3
More "settings" to "environment" renames. 2020-12-04 06:33:52 -06:00
Buster "Silver Eagle" Neece
aed854a17c
Settings overhaul, part 2
Make Settings a controlled entity.
2020-12-04 02:41:55 -06:00
Buster "Silver Eagle" Neece
5727f12b6f
Settings refactor part 1: Rename App\Settings to App\Environment.
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.
2020-12-02 22:18:06 -06:00
Buster "Silver Eagle" Neece
7c268f3a88
#3215 -- Implement "remember me" checkbox on login. 2020-11-30 05:32:52 -06:00
Buster "Silver Eagle" Neece
a0528ce71c
Refactor sync task class names. 2020-11-30 03:55:30 -06:00
Buster "Silver Eagle" Neece
9f8c808859
#2981 -- Make playlist export path have a period for legacy purposes. 2020-11-28 19:27:37 -06:00
Buster "Silver Eagle" Neece
08f948e96b
Add support for Simplified Chinese. 2020-11-25 02:00:20 -06:00
Buster "Silver Eagle" Neece
13b66eca7e
Fix "Advanced" saying "Undefined", make it translatable too. 2020-11-17 20:28:44 -06:00
Buster "Silver Eagle" Neece
8c730b3d41
Remove Chosen JS library, replace with Select2. 2020-11-17 19:13:08 -06:00
Buster "Silver Eagle" Neece
8ee4d3864b
Improve lock management and always clear locks when manually running sync. 2020-11-14 20:47:38 -06:00
Buster "Silver Eagle" Neece
62ed3aa51d
Supply individual worker names for each queue worker. 2020-11-14 18:06:34 -06:00
Buster "Silver Eagle" Neece
76a14ba638
Move API keys to other admin menu. 2020-11-14 15:45:39 -06:00
Buster "Silver Eagle" Neece
582b8faef9
Warn about sync tasks not having been run recently.
Also includes a minor rewrite of the EventDispatcher, and a restructure of notification checks into standalone classes.
2020-11-12 15:30:02 -06:00
Buster "Silver Eagle" Neece
6de636f475
Unified Filesystem Overhaul (#3341)
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.
2020-11-09 21:06:48 -06:00
Buster "Silver Eagle" Neece
f4ee44199c
Revert commit and set environment to "Testing". 2020-10-25 05:58:06 -05:00
Buster "Silver Eagle" Neece
6711feeeee
Move lazy-loading of cache interface to downstream services. 2020-10-25 05:48:50 -05:00
Buster "Silver Eagle" Neece
600988be4f
Lazy-load the Redis cache because locale commands are called via regular PHP. 2020-10-25 05:31:47 -05:00
Buster "Silver Eagle" Neece
37c54e4937
Cache/Config changes for testing. 2020-10-25 04:53:52 -05:00
Buster "Silver Eagle" Neece
b4698ec833
Disable session cache on CLI commands too. 2020-10-25 02:28:21 -05:00
Buster "Silver Eagle" Neece
4c7fe5c1ce
#3298 -- Properly flush Redis cache during SFTP upload. 2020-10-25 01:46:41 -05:00
Buster "Silver Eagle" Neece
6c69e6fe52
Better line update channels up with update notifications. 2020-10-24 10:26:55 -05:00
Buster "Silver Eagle" Neece
bc7773a2f1
#3312 -- Remove the "Administer Users"/"Permissions" permissions. 2020-10-22 06:16:19 -05:00
Vaalyn
7fa7ca781d
Make ACL permissions extendable by plugins via event dispatching (#3309) 2020-10-22 02:18:05 -05:00
Buster "Silver Eagle" Neece
80192a31d5
Code style fixes for metadata manager adapter. 2020-10-21 05:36:51 -05:00
Buster "Silver Eagle" Neece
9e4bc0e51d
Implement abstract Metadata read/write interfaces. 2020-10-21 05:04:58 -05:00
Nick Robillard
06808d01f8
Remove "difficult to map" options from custom fields auto assignable id3v2 fields select (#3293) 2020-10-19 06:00:00 -05:00
Vaalyn
415c24ca8f
Add possibility to register message queue message handlers for plugins (#3288) 2020-10-18 00:56:44 -05:00
Buster "Silver Eagle" Neece
909ea2b786
Make the Station Profile a standalone compiled Vue component. 2020-10-16 04:08:58 -05:00
Buster "Silver Eagle" Neece
fb4f7de2df
Make the public radio player a Vue component. 2020-10-15 05:01:32 -05:00
Buster "Silver Eagle" Neece
f822d83cda
Remove non-functional Timezone utility class. 2020-10-09 16:31:48 -05:00
Buster "Silver Eagle" Neece
c65e686798
Add initial support for Greek and Swedish localizations. 2020-10-09 04:38:17 -05:00
Buster "Silver Eagle" Neece
6458ac4953
#3219 -- Add dark theme for sweetalerts. 2020-10-07 22:35:54 -05:00
Buster "Silver Eagle" Neece
a6ec36b21c
Analytics Overhaul and InfluxDB Removal (#3243)
- Make the Analytics table in the database the primary one for handling statistics for all stations, removing the InfluxDB dependency entirely
 - Expand the Analytics table to also track unique listeners per hour and day
 - Properly clean up the Listeners table according to each installation's history retention settings
 - Implement a cute new animated "waiting for services" startup message that avoids previous wait messages that looked more like errors
2020-10-07 18:50:30 -05:00
Limon Monte
daf6e09bb9
Switch from SweetAlert to SweetAlert2 (#3239) 2020-10-07 03:09:01 -05:00
Buster "Silver Eagle" Neece
1a1ef5f013
Revert service configuration change. 2020-10-05 02:07:36 -05:00
Buster "Silver Eagle" Neece
c81ff62b5c
Remove the Song entity and restructure dependent tables accordingly (#3231)
* 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.
2020-10-04 17:35:41 -05:00
Vaalyn
adec893a93
Add possibility to add migrations from plugins via event dispatcher (#3168)
* Add possibility to add migrations from plugins via event dispatcher

* Add possibility to add Doctrine mapping classes paths from plugins via event dispatcher
2020-09-30 10:39:22 -05:00
Buster "Silver Eagle" Neece
7e4d572060
#3220 -- Bump log level for production instances. 2020-09-29 22:57:49 -05:00
Buster "Silver Eagle" Neece
949ac7940a
#3203 -- Clean up album art and waveforms (with an added sync check). 2020-09-29 11:45:50 -05:00
Buster "Silver Eagle" Neece
a2c0637386
Overhaul MessageQueue and switch back to Redis. 2020-09-26 18:05:33 -05:00
Buster "Silver Eagle" Neece
7bac35b2ff
Switch to new Symfony Lock component for our mutex locks. 2020-09-26 12:50:47 -05:00
Buster "Silver Eagle" Neece
ca38bea82b
Add clear-cache and clear-queue commands to debugger. 2020-09-22 15:47:46 -05:00
Buster "Silver Eagle" Neece
60704898f2
Restructure CLI commands and add message queue management commands. 2020-09-21 09:06:24 -05:00
Buster "Silver Eagle" Neece
a69c802a78
Make Sync (cron) tasks an event that plugins can attach to. 2020-09-20 07:07:09 -05:00
Buster "Silver Eagle" Neece
18daed36b0
#3042 -- Update Nowplaying library to apply fixes. 2020-09-16 06:56:25 -05:00
Buster "Silver Eagle" Neece
0de15ea673
#3096 -- Extend Doctrine redeliver timeout. 2020-09-14 19:14:13 -05:00
Buster "Silver Eagle" Neece
c54836726f
#3170 -- Fix play icon switching for all files on the media manager. 2020-09-13 22:26:26 -05:00
Vaalyn
63a2aeab26
Add configurable time range for duplicate prevention (#3172)
* Add configurable time range for duplicate prevention

* Add missing belongsTo to duplicate prevention range setting

* Fix bug in calculation of least played song when duplicate can't be prevented by taking history timestamp_start into account
2020-09-13 19:03:04 -05:00
Buster "Silver Eagle" Neece
9d764ae9b5
(Ansible) set table length to avoid metadata storage error. 2020-09-06 16:46:27 -05:00
Buster "Silver Eagle" Neece
a5a0149d26
Implement lazy-loading service locator for Webhook and Sync locators. 2020-08-28 05:32:33 -05:00
Buster "Silver Eagle" Neece
93ff68881f
Webhook and Sync Task Refactor
Moving service locator dependencies to their own Collections and make webhooks dispatch via MessageQueue messages.
2020-08-28 02:04:23 -05:00
Buster "Silver Eagle" Neece
23f2172488
Scheduler/StationQueue Rework (#3087)
Create a new "StationQueue" entity that contains the upcoming song queue, and split the important AutoDJ functionality across multiple classes (Annotations, Queue and Scheduler).
2020-08-16 09:54:01 -05:00
Buster "Silver Eagle" Neece
0889916194
Better error handling through wrapping exceptions with richer requests. 2020-08-10 02:46:09 -05:00
Buster "Silver Eagle" Neece
51a2292803
Implement a custom crossfade function for live streams. 2020-08-02 12:32:55 -05:00
Buster "Silver Eagle" Neece
ffa6d6b4fc
Auto-load most Vue component deps from Webpack manifest. 2020-07-15 03:00:17 -05:00
Buster "Silver Eagle" Neece
989ef42b49
Add theme class to body, update Codemirror styling. 2020-07-12 03:57:03 -05:00
Buster "Silver Eagle" Neece
f3f845cf1a
#3020 -- Switch to MariaDB-based message queue. 2020-07-11 00:22:02 -05:00
Buster "Silver Eagle" Neece
6f66ff072b
Make Auth and Customization PSR-7 lifecycle friendly. 2020-07-09 23:15:27 -05:00
Buster "Silver Eagle" Neece
16ce83be51
Remove unused code. 2020-07-08 19:30:58 -05:00
Buster "Silver Eagle" Neece
2abb8bf623
Routine code cleanup. 2020-07-08 02:03:50 -05:00
Buster "Silver Eagle" Neece
df7053e3f7
#3014 -- Update log level to string on GuzzleHTTP library. 2020-07-06 01:47:34 -05:00
Buster "Silver Eagle" Neece
26088a36ba
Move to Guzzle 7.x for PSR-18-compatible client. 2020-07-05 21:36:50 -05:00
Buster "Silver Eagle" Neece
62763250ca
Remove Sentry, simplify error handling.
Developer's note: the Sentry team has been very supportive of open-source and is good people! We simply don't use the library enough on our end to justify its dependencies in our codebase.
2020-07-04 11:08:53 -05:00
Buster "Silver Eagle" Neece
0adda37403
Incorporate new NowPlaying library
- Move much of AzuraCast's merging and client integration into the library itself
 - The library now uses typed properties on a return object for much more reliable hinting
 - Update both this library and SupervisorPHP to use PSR-17 and PSR-18 standardized factories
2020-07-03 15:24:04 -05:00
Buster "Silver Eagle" Neece
b96d8dbaac
Update SupervisorPHP version to 4.x alpha branch. 2020-07-01 19:26:26 -05:00
Buster "Silver Eagle" Neece
db2ba3f1ad
Finish migration to Symfony Messenger from Bernard. 2020-06-28 18:00:00 -05:00
Buster "Silver Eagle" Neece
9efa5a651e
Replace Bernard message queue with Symfony Messenger 5 2020-06-28 11:29:22 -05:00
Buster "Silver Eagle" Neece
4bcfad3eb5
Updates preparing for Doctrine 3.0
- 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.
2020-06-26 15:22:53 -05:00
Buster "Silver Eagle" Neece
0dea2de081
Update to Doctrine Migrations 3.x. 2020-06-25 03:47:49 -05:00
Buster "Silver Eagle" Neece
19bf99d836
Set default value for recording format. 2020-06-24 00:47:18 -05:00
Buster "Silver Eagle" Neece
3f162d484a
#2957 -- Use global "App.lang" for default translated strings. 2020-06-21 11:30:37 -05:00
Buster "Silver Eagle" Neece
903ffd7e63
Rework webpack building to be faster and reduce common load times. 2020-06-17 05:44:59 -05:00
Buster "Silver Eagle" Neece
6a335f4537
Minor refactoring; rename UploadAction to FlowUploadAction for clarity. 2020-06-16 05:43:31 -05:00
Buster "Silver Eagle" Neece
94640dbbb8
Remove "advanced" status on some essential fields. 2020-06-03 04:25:10 -05:00
Buster "Silver Eagle" Neece
0069df6d2d
Disable certain dangerous "advanced" features by default in new installs.
Some functionality of AzuraCast has always been intended for "Power Users", but seemingly no amount of warnings or labels will prevent users from discovering these features, misusing them, and either burdening our support channels or declaring AzuraCast to be "broken". With this update, new installations have some of these most dangerous settings (manual port assignments, manual directory selection, custom LS/Icecast config, etc.) disabled. They can easily be re-enabled by editing "azuracast.env" and turning them on, and will remain available for all previous users by default.
2020-05-27 02:36:30 -05:00
Buster "Silver Eagle" Neece
1c87b48bdb
#2834 -- Add CLI command to list user accounts.
Can be invoked by running CLI with "azuracast:account:list".
2020-05-26 02:38:18 -05:00
Buster "Silver Eagle" Neece
f93b150d54
#2860 -- Make Queue display page share permissions of queue API calls. 2020-05-20 18:41:24 -05:00
Buster "Silver Eagle" Neece
bd6d3203b1
Add On-Demand Streaming/Download Support (#2836)
This branch represents the initial earliest commit of a new option for radio stations that also want to make a portion of their media library available to the public (such as podcast episodes, royalty-free music, etc.) in an on-demand fashion.

Note: because of royalty restrictions with most radio stations, this feature is turned OFF by default on all stations, and even when enabled, station administrators must select each individual playlist that will contain on-demand available media.
2020-05-15 05:13:47 -05:00
Buster "Silver Eagle" Neece
769de19d00
Big Visual Waveform Editor Overhaul
- 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
2020-05-11 19:32:41 -05:00
Buster "Silver Eagle" Neece
9062903d6d
#2814 -- Slight refactor to address some router issues. 2020-05-08 19:40:34 -05:00
Buster "Silver Eagle" Neece
78c762ee4e
#2702 -- Use full request URI (sans path) for default base URL. 2020-05-05 20:42:14 -05:00
Buster "Silver Eagle" Neece
5203e8db08
#2654 -- Add InfluxDB debug CLI command. 2020-05-04 23:47:45 -05:00
Buster "Silver Eagle" Neece
a961481e85
#2249 -- Add ability to update Now Playing metadata via API call. 2020-05-03 21:48:26 -05:00
Buster "Silver Eagle" Neece
945b4a83df
Implement per-station default album artwork. 2020-05-02 20:28:08 -05:00
Buster "Silver Eagle" Neece
4804e2f710
Make Backend and Frontend config collections, avoiding "magic strings". 2020-05-02 02:58:59 -05:00
Buster "Silver Eagle" Neece
382dbef1a1
#2707 -- Run the queue build sync task more often. 2020-04-21 01:59:15 -05:00
Buster "Silver Eagle" Neece
0fb3c8e2eb
Fix URLs in webhook tests; force HTTPS on thumbnail/image URLs. 2020-04-20 22:57:57 -05:00
Buster "Silver Eagle" Neece
2f173fca53
Restrict the permission needed to manage LS configuration. 2020-04-19 20:53:34 -05:00
Buster "Silver Eagle" Neece
e82212629a
Make AutoDJ queue length per-station configurable. 2020-04-15 23:24:53 -05:00
Buster "Silver Eagle" Neece
f1040f7fdd
Initial refactor to separate queue management from Now Playing process. 2020-04-15 00:23:11 -05:00
Buster "Silver Eagle" Neece
767fb5dd31
Add confirmation step to the "Restart to Apply Changes" menu items. 2020-04-13 01:49:59 -05:00
Buster "Silver Eagle" Neece
51f82d1ceb
Add back ability to import playlist file from existing M3U/PLS file. 2020-04-12 02:23:45 -05:00
Buster "Silver Eagle" Neece
135c9f21dd
Add "reshuffle playlist" button to dropdown for shuffle-type playlists. 2020-04-09 10:13:49 -05:00
Buster "Silver Eagle" Neece
66ded0a693
Move route groups to separate files to ease maintenance. 2020-04-07 23:19:24 -05:00
Buster "Silver Eagle" Neece
5903387eb9
Add button to clear all pending requests. 2020-04-06 23:54:28 -05:00
Buster "Silver Eagle" Neece
07ac05f990
Switch from Redis Mutex to a simpler local Lock mechanism. 2020-04-04 00:48:27 -05:00
Buster "Silver Eagle" Neece
c59fca5933
Broaden permissions on profile API endpoint. 2020-04-02 17:13:26 -05:00
Buster "Silver Eagle" Neece
f1025d52f7
Unify all station profile API calls into a single response. 2020-04-02 06:30:00 -05:00
Buster "Silver Eagle" Neece
66d55d33f1
Add an uptime wait function during the setup process. 2020-03-29 23:50:40 -05:00
Buster "Silver Eagle" Neece
c851f92f27
Split Liquidsoap service control and configuration writer components. 2020-03-19 14:41:22 -05:00
Buster "Silver Eagle" Neece
f5e9160b6f
Frontend package updates; add fullscreen to listener map. 2020-03-13 18:47:23 -05:00
Buster "Silver Eagle" Neece
62219946f3
Add LS Telnet commands to Debug page. 2020-03-10 17:30:02 -05:00
Buster "Silver Eagle" Neece
710c64e041
Run backups in background and show rolling log; new backup timecode check. 2020-03-08 17:49:48 -05:00
Buster "Silver Eagle" Neece
81fbf023b0
Add ability to supply a banned listener IP list via the web interface. 2020-03-01 18:03:03 -06:00
Buster "Silver Eagle" Neece
0939599532
Create new "Debug" page for testing internal functions in debug mode. 2020-03-01 10:26:49 -06:00
Buster "Silver Eagle" Neece
82b9ec685d
Create new "Edit Liquidsoap Config" page; allow editing in more places. 2020-02-23 06:58:47 -06:00
Buster "Silver Eagle" Neece
18a2089377
Formalize and define the new /station/{id}/schedule API endpoint. 2020-02-19 09:05:15 -06:00
Buster "Silver Eagle" Neece
33d2ed64ae
Implement Streamer Schedules, Schedule Enforcement and new Scheduled Items Panel on Profile (#2422)
* Commit new Schedule entity changes and new API endpoints.

* Fix possible cause of API POST errors.

* Fix syntax with JSON return slashes.

* Add "Schedule View" and "Enforce Schedule" settings to Streamers.

* Add "Scheduled" panel to Profile.
2020-02-17 22:32:14 -06:00
Buster "Silver Eagle" Neece
dbba8e3c00
Add ability to specify admin pw and load clients for remote relays. 2020-02-12 23:37:45 -06:00
Buster "Silver Eagle" Neece
027590dc54
Cleanup and optimization relating to the recent AzuraCore merge. 2020-02-12 20:29:42 -06:00
Buster "Silver Eagle" Neece
bddbab4e02
#2395 -- Fix default database name on Ansible installs. 2020-02-07 02:13:38 -06:00
Buster "Silver Eagle" Neece
4d4d75ad4d
Reunify AzuraCore and AzuraCast repositories. 2020-02-05 20:35:13 -06:00
Buster "Silver Eagle" Neece
5ccb3798dc
Add ability to delete individual broadcasts. 2020-02-03 01:15:57 -06:00
Vaalyn
4edbe6cd2a
Fix issue 2141 (#2362)
* Fix backups download route path

* Add download attribute to backup download link
2020-01-30 15:57:30 -06:00
Buster "Silver Eagle" Neece
41edc21987
Add ability to add folders to playlists and auto-assign contents. 2020-01-30 15:48:34 -06:00
Buster "Silver Eagle" Neece
ca9c5db39d
New feature: Track broadcasts and record them. (#2353)
* 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.
2020-01-28 20:23:55 -06:00
Buster "Silver Eagle" Neece
78eb312ec7
#2326 -- Add ability to uninstall GeoLite database. 2020-01-24 14:45:45 -06:00
Buster "Silver Eagle" Neece
71a91cc12d
#2325 -- Fix settings error on Ansible installations. 2020-01-22 23:04:50 -06:00
Buster "Silver Eagle" Neece
72013d105f
Expand SFTP username length to 32. 2020-01-22 18:44:15 -06:00
Buster "Silver Eagle" Neece
31c34ebbc4
Abstract IP Geolocation services and add DBIP support. 2020-01-22 04:48:02 -06:00
Buster "Silver Eagle" Neece
2c093abfe3
Update syntax on SHOUTcast authhash form. 2020-01-21 00:26:21 -06:00
Buster "Silver Eagle" Neece
feeb8b9af1
#2306 -- Partially revert removal of "Prefer Browser URL" setting. 2020-01-21 00:02:06 -06:00
Buster "Silver Eagle" Neece
b6f558eb54
Always prefer browser URL and always enable SFTP server.
Both settings are no longer relevant and turning them off would cause unexpected issues, so they're being removed completely instead to ease configuration difficulty.
2020-01-15 14:52:47 -06:00
Buster "Silver Eagle" Neece
14ecffa4b7
Make WebDJ link always-HTTPS in sidebar; fix possible JS issue. 2020-01-10 23:56:45 -06:00
Buster "Silver Eagle" Neece
343a0a6e46
Move Vue, uncompiled JS, etc. files out of public web directory. 2020-01-08 20:25:38 -06:00
Buster "Silver Eagle" Neece
a208c172df
Switch to "provide license, download automatically" for GeoLite DB. 2020-01-08 14:37:56 -06:00
Buster "Silver Eagle" Neece
ebb6349ae1
Rename Sftp class, use new external auth support. 2020-01-08 13:24:33 -06:00
Buster "Silver Eagle" Neece
e9d8775af6
Switch from FTP to SFTP on Docker installations. 2020-01-05 15:29:56 -06:00
Buster "Silver Eagle" Neece
388bcee951
#2250 -- Handle MaxMind no longer offering free public downloads.
- Remove automatic download attempt from Ansible installation process
 - Allow listener report to function without the MaxMind database present, but with error messages
 - Create new "Install GeoLite Database" page in system administration, allowing user upload of the MaxMind database, with instructions
2019-12-31 06:49:25 -06:00
Buster "Silver Eagle" Neece
c72be08e99
Make the "reprocess media" command allow one station only. 2019-12-15 02:53:04 -06:00
Buster "Silver Eagle" Neece
7fea11f544
Enable "Prefer Browser URL" by default. 2019-12-02 18:46:24 -06:00
Buster "Silver Eagle" Neece
440687e93b
Settings forms code refactor, fixes #2171. 2019-11-25 21:25:29 -06:00
Buster "Silver Eagle" Neece
42d08db5a2
Add internal "get IP" command for PureFTPD. 2019-11-22 04:44:03 -06:00
Buster "Silver Eagle" Neece
19dd927189
Finish initial buildout of new playlist editor. 2019-11-06 15:19:32 -06:00
Buster "Silver Eagle" Neece
74e9154e74
Finish initial buildout of new modal Playlist form. 2019-11-06 02:57:39 -06:00
Buster "Silver Eagle" Neece
27be5deead
Style updates, form refactor for both Media and Playlists. 2019-11-05 16:55:27 -06:00
Buster "Silver Eagle" Neece
54140c4674
Update loaded assets and finish "reorder" functionality. 2019-11-04 15:59:52 -06:00
Buster "Silver Eagle" Neece
a44f9fe0bb
Further dev work on new playlist manager. 2019-11-03 20:19:25 -06:00
Buster "Silver Eagle" Neece
20abb359c0
Create Vue components and move Playlist endpoints to API. 2019-11-03 00:22:00 -06:00
Buster "Silver Eagle" Neece
9fc7a6328a
DB migrations and initial API endpoint preparation. 2019-11-02 13:50:21 -05:00
Buster "Silver Eagle" Neece
80b7ca9461
Stop the task processor if the EntityManager is closed. 2019-10-31 21:52:09 -05:00
Buster "Silver Eagle" Neece
0112568041
#2068 -- Move "write playlist to disk" task to the message queue. 2019-10-29 14:49:03 -05:00
Buster "Silver Eagle" Neece
d90d48bc54
Fix password field name on administration page. 2019-10-29 04:27:03 -05:00
Buster "Silver Eagle" Neece
2f03b038f7
Refactor Account/Profile sections and fix #2099 (2FA setup errors). 2019-10-26 18:35:24 -05:00
Buster "Silver Eagle" Neece
cd72560032
Update Composer deps, switch to Docker image for CA cert updates. 2019-10-24 23:46:05 -05:00
Buster "Silver Eagle" Neece
7f96916a0d
#2076 -- Revamp how album art changes are handled.
- 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.
2019-10-24 14:37:27 -05:00
Buster "Silver Eagle" Neece
047d19e972
Protect against accidentally loading the same dir, but with a prepended slash. 2019-10-22 01:39:07 -05:00
Buster "Silver Eagle" Neece
17d306b970
Enable Web Radio Proxy by default on new installations. 2019-10-20 00:44:33 -05:00
Buster "Silver Eagle" Neece
ff7d741455
Fix upload namespace on routes. 2019-10-10 20:51:55 -05:00
Buster "Silver Eagle" Neece
7f55696b47
Add new media manager album art tab. 2019-10-10 20:22:02 -05:00
Buster "Silver Eagle" Neece
1d2ed5fa55
Move file routes to API endpoints and add inline renaming. 2019-10-09 21:13:04 -05:00
Buster "Silver Eagle" Neece
4048ddcc01
Add bootstrap-vue to assets; finish initial Media Manager buildout. 2019-10-06 04:16:16 -05:00
Buster "Silver Eagle" Neece
d79c19c887
#2032 -- Return to using global Vue for drop-in components. 2019-10-04 03:02:53 -05:00
Buster "Silver Eagle" Neece
e0efde8612
Move Webcaster deps locally and switch Vue-i18n to Vue-gettext. 2019-10-03 22:12:15 -05:00
Buster "Silver Eagle" Neece
28765bd489
Bring Vue-i18n back until it's fully phased out. 2019-10-03 02:16:53 -05:00
Buster "Silver Eagle" Neece
8e49ea60c1
Switch to gettext method of Vue component localization. 2019-10-03 02:11:22 -05:00
Buster "Silver Eagle" Neece
d207a8ae83
Add "auto_assign" to custom field. 2019-09-30 03:33:20 -05:00
Buster "Silver Eagle" Neece
9a2f837586
Pull list of ID3v2 tags and add to custom field form. 2019-09-30 03:33:20 -05:00
Buster "Silver Eagle" Neece
c0d5365407
Prevent showing both "start station" and "restart station". 2019-09-29 19:01:15 -05:00
Buster "Silver Eagle" Neece
14de279bdf
Dependency-inject fixtures. 2019-09-29 16:45:05 -05:00
Buster "Silver Eagle" Neece
d7819a6993
Migrate Doctrine repositories to composited, DI-friendly classes. 2019-09-29 02:50:24 -05:00
Buster "Silver Eagle" Neece
9a8b095521
Switch back to Certainty and use a less frequent, non-per-request update process. 2019-09-27 21:07:33 -05:00
Buster "Silver Eagle" Neece
55d2a17119
Change "Name" in user form to "Display Name" to confirm it isn't a username. 2019-09-24 18:19:51 -05:00
Buster "Silver Eagle" Neece
a98aebb8e0
#1976 -- Add ability to restart a single station from CLI. 2019-09-18 21:31:13 -05:00
Buster "Silver Eagle" Neece
daf78fa738
Move Settings and Logging to static system-wide functions. 2019-09-12 00:31:01 -05:00
Buster "Silver Eagle" Neece
bf8bece9ac
#1954 -- Fix some LS commands on Ansible installs. 2019-09-11 12:58:22 -05:00
Buster "Silver Eagle" Neece
fb54e4ee78
Begin refactor of CLI commands to use new Silly DI format. 2019-09-10 18:10:57 -05:00
Buster "Silver Eagle" Neece
1ae761efd8
More "station_id" rename fixes. 2019-09-09 23:13:11 -05:00
Buster "Silver Eagle" Neece
a4a146673e
More fixes to allow for new PHP-DI bridge integration. 2019-09-09 23:02:08 -05:00
Buster "Silver Eagle" Neece
46fe1256cd
Transport 2FA secret via session rather than form input variable. 2019-09-04 10:25:31 -05:00
Buster Neece
457c4896f6
Add support for the FTP service notifying app of new uploads for processing. 2019-08-26 17:05:32 -05:00
Buster Neece
1a1a18dfe7
Add integrated FTP upload support. 2019-08-25 17:50:20 -05:00
Buster Neece
0953182033
Localization Overhaul
- Replace several "add %s", "remove %s", "manage %s" strings with dedicated strings for each action
- Make API responses locale-aware and translated
- Make CLI locale-aware and translated
- Add initial support for Turkish language
2019-08-21 17:34:05 -05:00
Buster Neece
d4b2b22428
Reduce number of concurrent Redis connections by consolidating to one DB. 2019-08-17 20:33:44 -05:00
Buster Neece
297356a7e3
Turn the live websockets off by default, but still easily enabled. 2019-08-16 12:23:35 -05:00
Buster "Silver Eagle" Neece
37c69afe85
Implement Audit Log (#1859)
Add a new "Audit Logs" table (and corresponding administrative page) that tracks inserts, updates and deletes to important database entries, along with tracking the user who made the change.
2019-08-14 18:50:53 -05:00
Buster Neece
a38d24ba43
Switch to using AC Central for IP determination; add IP to streamers page. 2019-08-10 02:45:17 -05:00
Buster Neece
2f8ab5544a
Switch back to Request/Response decorators. 2019-08-09 10:00:21 -05:00
Buster Neece
fa68598fce
Remove the two un-autowireable middlewares. 2019-08-06 23:43:21 -05:00
Buster "Silver Eagle" Neece
639dddf989
Slim PHP Framework 4 Update (#1822)
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.
2019-08-06 23:33:55 -05:00
Buster Neece
fab08ff763
Clean up SoundExchange report and remove duplicate PHP file. 2019-08-02 22:26:13 -05:00
Buster Neece
68088fbd05
Create a page showing AzuraRelay instances. 2019-07-31 22:20:06 -05:00
Buster Neece
bc1c2cb871
Allow disabling of websocket updates; improve NP time counter stability. 2019-07-31 13:47:12 -05:00
Buster Neece
be7459c57d
Switch to older (but more reliable) way of sending nchan messages. 2019-07-31 13:23:03 -05:00
Buster Neece
bec2880f2c
Use nchan library from npm and directly import into Vue. 2019-07-26 18:51:59 -05:00
Buster Neece
83f3d407a5
Bring nchan back. 2019-07-25 23:54:25 -05:00
Buster Neece
5a9ec823e4
Make relays an internal URL and prevent :443 infinite redirects. 2019-07-23 11:51:06 -05:00
Buster Neece
c9e0d8ee93
Update autocomplete on new-password/CSRF; composer update. 2019-07-20 20:31:03 -05:00
Buster Neece
b5cd364402
Bring back the AzuraCast AutoDJ (and "Next Song"). 2019-07-17 16:29:21 -05:00
Buster Neece
ffcf01adc8
Fix migration, add POST relay update and remote adapter. 2019-07-15 18:47:05 -05:00
Buster Neece
3a1faa3887
Add DB migration, entity and editable checks. 2019-07-14 23:47:39 -05:00
Buster Neece
419d524744
Add new relays API endpoint and fix response docs on some other endpoints. 2019-07-10 12:45:54 -05:00
Buster Neece
56e6b4c232
Unify CLI commands 2019-07-10 00:45:10 -05:00
Buster Neece
fd01cf78be
Use dirrty jQuery library for more accurate "form is changed" detection. 2019-06-27 16:09:40 -05:00
Buster Neece
a6fa2bbad0
Fix password-change checking the original password and confirming the new one. 2019-06-27 03:30:27 -05:00
Buster Neece
eea56852eb
Consolidate documentation onto site homepage and update relevant links. 2019-06-21 18:27:18 -05:00
Buster Neece
b95449064a
#1606 -- Move fonts back to local so entire UI is self-hosted. 2019-06-19 02:21:21 -05:00
Buster Neece
fab95b13f7
Switch to smaller 10-year range timezone data. 2019-06-03 18:09:29 -05:00
Buster Neece
20100f0c31
Add station clock to sidebar. 2019-06-03 14:58:44 -05:00
Buster Neece
2e5b829efc
Switch to sortablejs to remove a jQuery dep and fix NPM audit reports. 2019-06-02 19:23:17 -05:00
Buster Neece
90e69594b8
Big locale update, add Czech as supported language. 2019-05-28 12:49:24 -05:00
Buster "Silver Eagle" Neece
16fc2c54bc
Implement zero-downtime backups + nightly backups (#1574)
* Create new backup and restore commands allowing live backups.
* Switch migrate script to use new backup method.
* Avoid loading fixtures, ensure directories exist when restarting stations.
* Include album art in media backup.
* First portion of automated backup management code.
* Further backup page work; add download/delete functionality.
* Implement automatic backups and "manual run" page.
* Switch automatic backup filename to match text.
* Add new locales.
* Add restore instructions and ability to view latest backup log.
2019-05-23 10:29:22 -05:00
Buster Neece
1b0e7cdde6
Move a majority of form styling to SCSS. 2019-05-19 09:54:34 -05:00
Buster Neece
39e599c6ca
Switch to leaflet for listener map. 2019-05-18 22:25:34 -05:00
Buster Neece
448e002dee
Switch to charts.js on Reports Overview, remove Highcharts/Highmaps. 2019-05-18 11:05:02 -05:00
Buster Neece
67ba7358b1
Switch to chart.js for homepage charts, add accessible alt values. 2019-05-18 07:06:07 -05:00
Buster Neece
07ba1c1dd9
Clean up styling on 2FA enable form. 2019-05-18 04:47:14 -05:00
Buster Neece
a7754c8b59
Add back form_edit (but don't use it in form_page) for inline forms. 2019-05-17 16:23:42 -05:00
Buster Neece
ca897525ee
Switch tabs and error block to be rendered upfront to avoid FOUC. 2019-05-17 16:16:21 -05:00
Buster Neece
e3c677fe54
#1544 -- Properly handle station-local timezone on playlist homepage. 2019-05-15 09:05:32 -05:00
Buster Neece
fb57959765
Prevent once-per-day playlists from showing up as "all-day". 2019-05-14 13:35:40 -05:00
Buster Neece
12e00b5271
Update frontend deps, clean up Utility function calls, switch many things to Moment. 2019-05-14 09:23:06 -05:00
Buster Neece
575d5b5662
Show station time zone when editing playlist. Set TZ in LS directly. 2019-05-14 02:48:41 -05:00
Buster Neece
48427d46a3
Make timezone Station-specific and remove now-unused offset code. 2019-05-13 16:25:36 -05:00
Buster Neece
6e618ef595
Merge "once per day" into "scheduled", switch to HTML5 time, add TZ. 2019-05-13 07:57:53 -05:00
Buster Neece
4774b5f29c
Design rework of the station profile page. 2019-05-10 00:44:47 -05:00
Vaalyn
3dcc087487 Visual improvements 1 (#1516) 2019-05-08 17:23:26 -05:00
Buster Neece
3b316f3cdf
Always use Highcharts accessibility module. 2019-05-04 02:37:11 -05:00
Buster Neece
b62c5437df
Migrate to allow more LS playlist options, including merging. 2019-04-29 00:20:23 -05:00
Buster Neece
e8a4db3fad
#1475 -- Fix routing error with album art. 2019-04-25 04:08:57 -05:00
Buster Neece
69eff1ead9
Initial work on files API endpoints. 2019-04-22 06:19:21 -05:00
Buster Neece
6ebb9f8e3b
Make inline player a Vue component. 2019-04-16 20:12:25 -05:00
Buster Neece
39680f6ebb
Make public radio player a standalone Vue component. 2019-04-15 22:00:49 -05:00
Buster Neece
dcf27f6539
Closes #1283 -- Add web hooks API endpoint. 2019-04-14 17:12:49 -05:00
Buster Neece
8dc072d1c8
Simplify routing file and add Playlist API endpoints. 2019-04-12 22:27:58 -05:00
Buster Neece
e93892be80
Switch station restart flagging to a Doctrine event handler. 2019-04-11 23:46:27 -05:00
Buster Neece
4f68512b43
#1281 #1282 -- Add remotes/mount point API. 2019-04-09 23:46:51 -05:00
Buster Neece
3554d65c75
Move port checker to Validation; create StationCloneForm, etc. 2019-04-09 04:06:44 -05:00
Buster Neece
28f8eaf11f
Revamp EntityForms, unify how station-based entities are constructed. 2019-04-08 03:25:01 -05:00
Buster Neece
06a2a5e6b7
#1400 -- Add "#" to avoided password characters. 2019-04-08 00:35:29 -05:00
Buster Neece
9c5797dc38
#788 -- Implement station management via API endpoint. 2019-04-08 00:09:53 -05:00
Buster Neece
bbe1690843
General API cleanup and closes #1277 -- Add streamer/DJs API endpoint. 2019-04-07 03:40:55 -05:00
Buster Neece
eb82cc87b4
#1400 -- Improve validator for streamer password. 2019-04-05 11:23:01 -05:00
Buster Neece
365f642d72
#1382 -- Add new "play single track" setting. 2019-04-02 17:49:45 -05:00
Buster Neece
0a305532df
#1349 -- Make remote playlist buffer user-configurable. 2019-03-31 17:09:10 -05:00
Buster Neece
6c1287c871
Set up dev routes file. 2019-03-26 20:43:32 -05:00
Buster Neece
a5e6a87c60
Playlist refactor initial commit. 2019-03-26 02:05:50 -05:00
Buster Neece
93612f9468
Remove autoplay. Make stream multiselect entirely Vue-powered. 2019-03-24 19:12:04 -05:00
Buster Neece
748ade0089
Unify mount form config; make mounts/remotes selectable on public page. 2019-03-24 00:46:54 -05:00
Buster Neece
0e59d20ed4
Locale update and directly credit Sentry in the settings pane. 2019-03-22 23:32:08 -05:00
Buster Neece
47ec65182a
Make error reports opt-in for all installations. 2019-03-22 21:01:37 -05:00
Buster Neece
48f104d8cd
Improve Sentry integration. 2019-03-22 20:22:32 -05:00
Buster Neece
0bb68f7a9e
Minor code quality fixes, test Sentry integration on dev. 2019-03-22 17:07:17 -05:00
Buster Neece
57fe9d9137
Divide playlist form into tabs like station form. 2019-03-20 21:18:38 -05:00
Buster Neece
3ec3f69714
Change light theme secondary color and #1087 -- Reorganize player layout 2019-03-20 18:46:27 -05:00
Buster Neece
56e6db456f Add smart-fade, replaygain and NRJ as standard station options. 2019-03-19 16:55:13 -05:00
Buster Neece
a157e9c0c1 Fix Twitter apps URL and #1312 fix webhook dispatching. 2019-03-16 00:20:33 -05:00
Buster Neece
ae68a43883 #753 -- Create "jingle mode" for playlists that hides metadata. 2019-03-14 21:22:09 -05:00
Buster Neece
e9052bd2d9 Fix minor theme switcher issue. 2019-03-14 17:36:20 -05:00
Buster Neece
db95d55c40 Webhook refactor and implement #500, Twitter rate limiting. 2019-03-14 17:24:42 -05:00
Buster Neece
b053abae04 Finish implementing 2FA in profile and login. 2019-03-14 03:40:02 -05:00
Buster Neece
cea176f536 Layout changes to profile for 2FA. 2019-03-13 20:49:19 -05:00
Buster Neece
bfb442df6d Add popper tooltips to some sidebar menu items. 2019-03-10 03:05:16 -05:00
Buster Neece
8e28a206b9 #741 -- Add quick toggle for playlists to main admin page. 2019-03-09 17:14:46 -06:00
Buster Neece
b4e1581da1 Add theme switcher, Help to navbar, form page exit confirmation. 2019-03-06 00:08:42 -06:00
Buster Neece
575a3e74e6 #1249 -- Remove required check for toggle options. 2019-03-04 14:16:13 -06:00
Buster Neece
dad93bb83f Use checkboxes for single-option settings, align language and UX across forms. 2019-03-03 16:23:14 -06:00
Buster Neece
28d2725ea3 Minor refactor of station profile controller, now that it's simpler. 2019-03-01 18:33:33 -06:00
Buster Neece
2852502dd2 Clarify language for remote relays. 2019-03-01 18:03:49 -06:00
Buster Neece
be5c8159d3 #1198 -- Fix repeating of short jingles. 2019-02-28 15:26:18 -06:00
Buster "Silver Eagle" Neece
7a872d145b Fix reloading on profile, refactor how LS sends feedback to avoid issues. 2019-02-27 13:18:12 -06:00
Buster "Silver Eagle" Neece
5839702a4c Refactor some "Next Song" functionality; add LS feedback back to AzuraCast. 2019-02-25 00:43:00 -06:00
Buster "Silver Eagle" Neece
0802948036 #1213 -- Fix API calls from sidebar navigation. 2019-02-24 14:09:27 -06:00
Buster "Silver Eagle" Neece
c975e8c081 Make menus configuration-driven so plugins can extend them. 2019-02-23 23:28:01 -06:00
Buster "Silver Eagle" Neece
e2c73c13fd #1180 -- Greatly improve user self-deletion/role management protections. 2019-02-17 18:52:01 -06:00
Buster "Silver Eagle" Neece
722dce7785 Build and implement common EntityForm wrapper class. 2019-02-17 00:58:48 -06:00
Buster "Silver Eagle" Neece
3d2405c907 Revert DJ silence detection to address possible runaway CPU/shutdown issues. 2019-02-13 12:32:02 -06:00
Buster "Silver Eagle" Neece
90e792cf15 #1148 -- Add missing translated strings. 2019-02-06 13:29:02 -06:00
Buster "Silver Eagle" Neece
d9a5eeed13 #1149 -- Consolidate fromArray/toArray and Serializer, add smart type casting. 2019-02-05 11:22:05 -06:00
Buster "Silver Eagle" Neece
1145911358 Make DJ silence detection user-configurable. 2019-02-02 15:59:36 -06:00
Buster "Silver Eagle" Neece
8a6701403a Code and PHPDoc cleanup to green-light level 2 static analysis. 2019-01-31 11:54:17 -06:00
Buster "Silver Eagle" Neece
72c4d3ab44 #1115 -- Make DJ mount point configurable. 2019-01-29 18:25:41 -06:00
Buster "Silver Eagle" Neece
c1f2017052
Implement #368 -- Add administrator-set storage quotas to individual stations. (#1122)
* Implement station quotas at DB level, switch to big-int math for checks.
* Update AzuraCore
* No longer try to auto-typecast fields (let the setters do that).
* Implement admin form, fix Flow error displays, implement checking/adding quota.
* Decrement from quota when a file is deleted.
* More robust handling of empty values.
2019-01-28 14:47:19 -06:00
Buster "Silver Eagle" Neece
bf0341d900 Create administrator-editable-only sections of unified station profile. 2019-01-27 00:14:19 -06:00
Buster "Silver Eagle" Neece
d61dd12859 Consolidate station form handling and prevent erroneous local broadcast attempts. 2019-01-26 14:38:36 -06:00
Buster "Silver Eagle" Neece
b845a88350 #1108 -- Make "is_public" selectable for remote relays. 2019-01-24 07:59:08 -06:00
Buster "Silver Eagle" Neece
39db6f4882 #1105 -- Add user-configurable CORS ACAO header setting. 2019-01-23 15:59:25 -06:00
Buster "Silver Eagle" Neece
73547b5c55 Significantly improve the service restart process; add live service status check on profile. 2019-01-16 08:53:04 -06:00
Buster "Silver Eagle" Neece
981a09483d Finish settings API endpoint; move form styling to static assets. 2019-01-09 12:57:23 -06:00
Buster "Silver Eagle" Neece
5cb5909e89 Add custom fields API endpoint. 2019-01-06 05:32:05 -06:00
Buster "Silver Eagle" Neece
2ad28872b2 Add settings/branding API endpoint and docs. 2019-01-06 02:57:09 -06:00
Buster "Silver Eagle" Neece
872145342d Permission optimization to avoid unnecessary DI. 2019-01-05 09:25:20 -06:00
Buster "Silver Eagle" Neece
7a74e6c14f Add role and permission management API endpoints. 2019-01-05 06:02:49 -06:00
Buster "Silver Eagle" Neece
a42ae53379 Create new DoctrineEntityNormalizer for API call handling. 2019-01-04 11:32:11 -06:00
Buster "Silver Eagle" Neece
c26f6e980c Refactor class names, #1065 allow reinstallation of SHOUTcast. 2019-01-03 02:30:56 -06:00
Buster "Silver Eagle" Neece
13e0c744c6 Implement message queue and worker for media processing/import tasks. 2018-12-30 04:18:48 -06:00
Buster "Silver Eagle" Neece
fa8d5714fe Move listener and request API controllers into the proper namespace. 2018-12-26 17:48:01 -06:00
Buster "Silver Eagle" Neece
7e40e52c8c Merge branch 'master' into feature/api_endpoints 2018-12-26 04:55:16 -06:00
Buster "Silver Eagle" Neece
43a115f3e6 Integration of CSS/JS assets into the Gulp build process. 2018-12-26 01:20:15 -06:00
Buster "Silver Eagle" Neece
94495a3cc3 #1066 -- Re-localization of vital CSS/JS assets. 2018-12-25 20:25:42 -06:00
Buster "Silver Eagle" Neece
10970517ac Provide a dynamic openapi.yml manifest, fix OpenAPI markup on several sections; update Swagger UI. 2018-12-24 02:47:45 -06:00
Buster "Silver Eagle" Neece
e21a23ef35 More refinements to common controllers; remove need for POST endpoint for Bootgrid. 2018-12-23 17:26:15 -06:00
Buster "Silver Eagle" Neece
5d1cc60b2d Shift API namespace to allow for entities to be in the OpenAPI docs. 2018-12-22 11:27:41 -06:00
Buster "Silver Eagle" Neece
c32a7188ea Use strict entity formatting; other minor fixes. 2018-12-21 18:01:04 -06:00
Buster "Silver Eagle" Neece
b2c6b5e54e Create new abstract CRUD API containers. 2018-12-20 04:25:24 -06:00
Buster "Silver Eagle" Neece
81c5ab4aa5 Allow (and default to) checking for release updates only. 2018-12-15 13:34:18 -06:00
Buster "Silver Eagle" Neece
676927b024 Fix issues with queueing songs, add queue API endpoints and queue viewer page. 2018-12-12 03:01:03 -06:00
Buster "Silver Eagle" Neece
9b5ef537f1 Further refinement on JS includes and assets. 2018-12-11 15:39:30 -06:00
Buster "Silver Eagle" Neece
ca8b45a635 Update SweetAlert; use Babel for transpiling during build process. 2018-12-11 15:15:53 -06:00
Buster "Silver Eagle" Neece
70914a67c1
Implement Flysystem, move album art to filesystem, fix related issues #953 #962 (#1022)
* Initial entity and dependency commit.

* Create migration test for album art move.

* File management controller refactor and further wiring of Flysystem.

* Form/UI fixes and refactors related to Flysystem.

* Update composer deps and add merge plugin to avoid dep overlap.

* Fix batch moving/directory listing, add lightboxing to files manager.

* Fix album art writing, use special upload method to skip disk round-trip.

* Migrate StationRepository to be DI-driven, update unit tests and the setup controller.
2018-12-05 01:15:51 -06:00