~aleteoryx/lfm_embed

ref: 7e4da5f0de16c35ce304620bd37b08d57ff46858 lfm_embed/TODO.md -rw-r--r-- 4.0 KiB
7e4da5f0alyx Custom font support complete 8 months ago

#Future plans for this project:

#Move more things internal

Untouched.

Of the crates currently relied on, the following appear too feature-packed should be replaced with simpler internal code, to reduce binary size.

  • duration-str
  • urlencoding

#Watermarking

Untouched.

Support for a limited form of (optional) watermaking. It would be up to the themes to include it.

#Query Parameters

  • ?watermark specifies opting-in to the watermark.

#Config Entries

  • LFME_WATERMARK_MANDATORY: 0|1 forces a watermark if 1. The main instance will not use this, but alternate instances may.
  • LFME_WATERMARK_TEXT: string should contain the name of the specific instance, or a tagline.
  • LFME_WATERMARK_IMG: string should contain a link to an image. The rendered size of this image is at the discretion of a given theme, but it should be around 32x32, and have an aspect ratio no greater than 1:2.
  • LFME_WATERMARK_URL: string should contain a link to the host, or whoever else the watermarker wishes.

#Context Members

  • watermark: object null, unless (LFME_WATERMARK_TEXT || LFME_WATERMARK_IMG || LFME_WATERMARK_URL) && (?watermark || LFME_WATERMARK_MANDATORY). Should be interpreted as whether to render a watermark.
  • watermark.text = LFME_WATERMARK_TEXT. Defaults to lfm_embed.
  • watermark.img = LFME_WATERMARK_IMG. Defaults to null.
  • watermark.url = LFME_WATERMARK_URL. Defaults to null.

All that is guaranteed is the presence of watermark.text, so all themes should be able to fallback to text. Image support should be considered optional. Linking should be considered optional.

It is not an error to specify a mandatory watermark with no possible contents, as the watermark object will simply not be present. A warning should be output on startup.

#Additional Helpers

Untouched.

  • (range Number start: Number = 0): Number Generates values from start to the main argument, exclusive.
  • (random): Number Generates a random float.

#Additional Services to Support

Untouched.

This should be as transparent as possible to the theme and end-user.

#Services

  • libre.fm
  • listenbrainz
  • hacienda if/when it gets off the ground.

#Config Entries

  • LFME_BACKEND_DEFAULT: string specifies a default backend for /user/ requests..
  • LFME_BACKEND_ADDITIONAL_GNUKEBOX: string,* specifies a set of additional domains supporting the libre.fm API.
  • LFME_BACKEND_ADDITIONAL_LISTENBRAINZ: string,* specifies a set of additional domains supporting the listenbrainz API.
  • LFME_BACKEND_ADDITIONAL_AUDIOSCROBBLER: string,* specifies a set of additional domains supporting the last.fm API.

#Query Parameters

  • ?backend=(last.fm|libre.fm|listenbrainz|LFME_BACKEND_ADDITIONAL_*)

#Context Members

  • user.service never not null
  • user.service.type (audioscrobbler|listenbrainz|gnukebox)
  • user.service.domain the string for the service's domain.

#Error Cache

Untouched.

Add support to lfm_embed::cache::AsyncCache for caching Err values with a different lifetime from Ok values.

#Completed Features

#Custom Fonts

Implemented!

#Query Parameters

Each of these are mutually exclusive, and take priority over eachother in the order listed below. The highest one detected will be handled and others, if present, will be silently ignored.

  • ?google_font= the name of a google font to try loading. If it exists, the fonts.googleapis.com stylesheet will end up in font.css. The font name will end up in font.name.
  • ?include_font= the URL to a font to include. font.css will be a generated @font-family declaration. A provided name will be in font.name.
  • ?font= the name of a browser-native or system font. This will only set font.name.

#Context Members

  • font: object null if no font overrides are present.
  • font.name: string All text elements should have their font set to this.
  • font.css If present, it should be placed inside a <style> tag somewhere. For legibility of generated HTML, preferably its own tag.