aboutsummaryrefslogblamecommitdiffstats
path: root/TODO.md
blob: e6cfb7545ecd1d784f4036977b3b68f47f58ae65 (plain) (tree)
1
2
3
4
5

                                
 
               
 








                                                                                                                                             
                    


                                                                                                                                                              
                                                                                             
 




                                                                                                                       



                            
                                                                                                                                                

              
             




























                                                                                                                                                                                                                     





                                                                                                         



























                                                                                                                         
# Future plans for this project:


## Custom Fonts

For ease-of-inclusion this should probably be handled by internal code, and provided as a set of properties on `lfm_embed::ctx::model::Data`.

There are 3 main kinds of fonts we should support.
- User-hosted fonts. These would be loaded directly from a link to a TTF,WOFF2,etc font file.
- Google fonts fonts. In theory, we'd proxy these, but that's not 100% necessary.
- Named fonts. e.x. 'serif', 'sans-serif', 'monospace'. Browser will handle these.

There is no good way to expose a typed enum with the current wizard UI, and the resulting UI from this could allow added user flexibility.

### Query Parameters

- `?font=foo` corresponds directly with `* { font-family: 'foo' }` in the CSS.
- `?font=foo&include-font=https://example.com/font.otf` will additionally append `@font-face { font-family: 'foo' src: url('https://example.com/font.otf') }`.
- `?include-stylesheet` allows for general stylesheet inclusion. It may be specified N times.

### Context Members

- `font: object` null if no font params specified.
- `font.name: string` contains `?font`
- `font.additional_css` will contain the `?include-font` css, as well as the proxied contents of `?include-stylesheet`.


## Move more things internal

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

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

- `(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

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.