Skip to content

Releases: kipavy/spotube-plugin-hifi-tidal

1.0.4

Choose a tag to compare

@github-actions github-actions released this 03 Aug 16:35
Replace release artifacts on re-run, and ship 1.0.4

Re-running the build for an existing tag left the old plugin.smplug in
place, so the corrected 1.0.3 package never reached the release even
though CI built it correctly. Set replacesArtifacts so a rebuild
overwrites, and cut 1.0.4 with the bytecode actually included.

1.0.2

Choose a tag to compare

@github-actions github-actions released this 03 Aug 16:21
Declare HttpResponse so .then callbacks resolve at runtime

matches() threw "Undefined identifier [HttpResponse]" on the first
request. The runtime resolves the type of every .then callback parameter
against the enclosing scope, so HttpResponse has to be declared in any
file that defines one — even though it is never referenced by name.

Compiling does not catch this, which is why CI was green. Both shipping
reference plugins carry the same seemingly-unused declaration.

Also fixes the identical latent failure in core.checkUpdate.

1.0.1

Choose a tag to compare

@github-actions github-actions released this 03 Aug 16:07
List the mp4 preset first so the default selection resolves

Spotube's getStreamOfQuality filters sources to those whose container
equals the selected preset's name and then reduces over them. An empty
result throws instead of falling back, so advertising a container the
instances never return makes every track fail silently.

The instances currently serve AAC in mp4, so mp4 has to be index 0. flac
stays listed for instances backed by a Hi-Fi tier account.

1.0.0

Choose a tag to compare

@github-actions github-actions released this 03 Aug 15:59
Add HiFi Tidal audio source plugin for Spotube

Plays Tidal audio in Spotube through public hifi-api instances.

- matches() searches /search/?s= and ranks an exact ISRC hit first, since
  Spotube passes the ISRC from the metadata provider and hifi-api returns
  one per result; that distinguishes remasters and radio edits which are
  otherwise identical by title
- streams() decodes the base64 manifest /track/ returns, taking the URL
  from the vnd.tidal.bts variant and skipping the DASH variant an audio
  element cannot play
- Endpoints are tried in order so a sleeping or account-blocked instance
  falls through to the next, with timeouts sized for free-tier cold starts

The matching and manifest decoding were validated against the live
instances before being ported to Hetu: ISRC-exact match ranked first and
the resulting URL served real audio (HTTP 206, audio/mp4).