026698cba2dfce40092cee181b6dae919442e375
Fix AzuraCast integration against verified API behavior
Verified against AzuraCast source (Files\BatchAction, FlowUploadAction,
Files\ListAction, Paginator, StationPlaylistMediaRepository):
- Rotation read a nonexistent 'mtime' key; the files API returns
'timestamp' (unix epoch). Age buckets now work, so tracks actually
migrate Currents -> Recurrents -> Gold as intended.
- Rotation now filters on type == 'media' (dirs are 'directory', not
'dir') and skips rows without a path/timestamp.
- Follow ?page= pagination on /files: the default (no params) response
is an unpaginated JSON array, but any paginated response is now
traversed instead of only page 1 being visible.
- POST /files/upload returns only {success, message}; it never returns
unique_id/path, and the file lands at the uploaded filename. Removed
the dead unique_id search; playlist+queue now use the known path.
- Added success/error checks for batch ops (playlist/queue) instead of
discarding responses, and queue no longer runs when playlist assign
or Currents lookup failed.
- Replaced curl subprocess shelling with aiohttp (already a matrix-nio
dependency): single helper for API calls, real multipart upload,
timeouts everywhere, no temp JSON/pickle files in DATA_DIR.
Functional test (mock AzuraCast mirroring verified API shapes):
15/15 checks pass - upload contract, pagination, batch ops, and age
bucketing (fresh/6d/10d/30d -> Currents/Currents/Recurrents/Gold,
directories and non-media excluded).
ParkerBot
ParkerBot is a Matrix bot that monitors a channel for YouTube links and generates weekly playlists from them. It also sends YouTube link titles to the channel it's in.
Running locally
- Clone the repo
- Install the dependencies, preferably in a venv:
uv venv --python 3.14 --seed source .venv/bin/activate uv pip install -r requirements.txt - Copy example.env to
.env, customize it. - Source
.env:source .env - Execute the app:
./main.py
Running as a container
- Customize the compose.yml if necessary, you might want to change the data volume's path or make it a named volume.
- Copy example.env to
.envand customize it. - Run locally as described above at least once on a machine with a web browser.
This is needed to get a valid
token.picklefor YouTube. Copy it to the data directory where you want to run the container. - Run the container, this is an example with
podman-compose:podman-compose up -d
Description
Matrix bot that generates YouTube playlists from links in a channel.
1.3 MiB
0 Stars
1 Watchers
0 Forks
Languages
Python
98.4%
Dockerfile
1.6%