Bumped API version to 1.12.0 along the way.
`getArtits` also got it event if it seems it has been added with version 1.14.0,
but I'm a bit concerned as to how clients will behave on authentication if the server
advertise itself as 1.13.0+
Closes#235
Ref #74
Metadata in `setup.cfg` rather than `pyproject.toml` as I'm a bit confused
about `setuptools` support for PEP-621.
Test stuff still in `setup.py`, this needs updating and I'm not satisfied with
the way they are loaded/discovered.
Example use case:
```
Some Album/
├── CD1
│ └── <songs>
├── CD2
│ └── <songs>
└── cover.jpg
```
Previously, downloading the `Some Album` folder would result in no data
being sent (not even `cover.jpg`)
This commit changes folder-based downloads so that the entire folder
tree (including any non-music) is added to the returned zip file. This
allows any included album art, scans, notes, etc. to be distributed with
the files.
Album-based downloads are unaffected.
- Fixes zip downloads failing when zipping enough data that Zip64
extensions are required by automatically enabling them if needed.
- Fixes zip downloads failing when a file has a datestamp that zipfiles
cannot store (pre-1980 or post-2108) by clamping them within the
supported range.
- Massively speeds up zip downloads by disabling compression (audio
files generally don't compress well anyway)
- Computes the total size of a generated zip file before streaming it
and sets the `Content-Length` header. This allows clients to show a
final size and progress bar while downloading, as well as detect if
the download fails.
- Adds a check to prevent sending an empty zip file to the client if
there was no content to download (will error out instead).
- Only includes cover art in the zip file if it's provided separately
from the files (ie. doesn't extract it from the tracks)
- Refactors the existing code for implementing the `/getCoverArt` API
endpoint to allow it to be reused.